Представление WPF, не скрывающее содержимое главного окна

#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>
  

Панель.zIndex MS Docs

Пожалуйста, обратите внимание, что он находится в строке 0, поэтому он не будет охватывать содержимое строки 1, если вы не установите Grid.RowSpan="2" .

Комментарии:

1. Пожалуйста. Я рад, что это помогло. Пожалуйста, отметьте ответ как принятый.