#wpf #view
#wpf #Вид
Вопрос:
У меня есть мое главное окно с сеткой (2 строки). Строка 0 привязана к нескольким представлениям (показывает только соответствующий код xaml):
<Grid>
<Grid.RowDefinitions>
//definition of 2 rows
</Grid.RowDefinitions>
<ContentControl Grid.Row="0" Content="{Binding SelectedViewModel}"/>
<StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Center" Margin="40,51,28,0" Width="449">
//definition of 2 buttons
</StackPanel>
</Grid>
в то время как строка 1 содержит 2 кнопки (назовем их A и B). Когда я нажимаю кнопку A, вид A отображается в строке 0, когда я нажимаю кнопку B, то же самое происходит с видом B. Каждый вид — это просто страница с другим цветом, поэтому я могу быть уверен, что вид действительно отображается. Довольно просто.
Теперь я заметил, что если я вставлю метку в строку 0:
<Grid>
<Grid.RowDefinitions>
//definition of 2 rows
</Grid.RowDefinitions>
<ContentControl Grid.Row="0" Content="{Binding SelectedViewModel}"/>
<StackPanel Grid.Row="0" Orientation="Horizontal" HorizontalAlignment="Center" Margin="40,51,28,0" Width="449">
<Label Name="MyLabel" Content="Label" HorizontalAlignment="Left" Margin="188,172,0,0" VerticalAlignment="Top" Height="56" Width="135" FontSize="22"/>
</StackPanel>
<StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Center" Margin="40,51,28,0" Width="449">
//definition of 2 buttons
</StackPanel>
</Grid>
представление не закрывает метку, которая остается видимой. Если я посмотрю на свойства представления, его цвет будет синим, а его непрозрачность установлена на 100%, поэтому он должен охватывать все, что отображается в сетке главного окна, не так ли? Что я делаю не так?
Спасибо
Gianni
Комментарии:
1. Есть ли у вас какие-либо стили, применяемые к ContentControl? Возможно, вы вручную устанавливаете его высоту, ширину, выравнивание по горизонтали или вертикали.
Ответ №1:
Вы можете поместить содержимое StackPanel
, содержащее the Label
, поверх the ContentControl
, изменив порядок, в котором они объявлены:
<StackPanel Grid.Row="0" Orientation="Horizontal" HorizontalAlignment="Center" Width="449">
<Label Name="MyLabel" Content="Label" HorizontalAlignment="Left" VerticalAlignment="Top" Height="56" Width="135" FontSize="22"/>
</StackPanel>
<ContentControl Grid.Row="0">
<StackPanel Background="Red" Opacity="1"/>
</ContentControl>
или установив значение> 0 для Panel.ZIndex
:
<ContentControl Grid.Row="0" Panel.ZIndex="1">
<StackPanel Background="Red" Opacity="1"/>
</ContentControl>
Пожалуйста, обратите внимание, что он находится в строке 0, поэтому он не будет охватывать содержимое строки 1, если вы не установите Grid.RowSpan="2"
.
Комментарии:
1. Пожалуйста. Я рад, что это помогло. Пожалуйста, отметьте ответ как принятый.