C# WPF将容器放置在固定位置

C# WPF将容器放置在固定位置,c#,wpf,C#,Wpf,我想将容器(带有任何自定义内容,例如ListView,…)放置在固定位置。按下按钮时,容器应出现。请看这张图片: 按我和单击我是按钮。如果单击了单击我,则应显示上面的红色容器。与相同,按我 我的问题:我怎样才能意识到这样的事情?红色容器应显示在所有其他控件(z索引)上。Canvas是最佳选择吗?这个容器有多大 这个问题很抽象。我不想要任何解决方案,只是一些关于我应该使用的容器和它应该如何放置的想法 顺便提一个问题 我是否应该在XAML中创建红色容器,并且只更改可见性的状态?还是应该用C#创建

我想将容器(带有任何自定义内容,例如ListView,…)放置在固定位置。按下按钮时,容器应出现。请看这张图片:

按我单击我是按钮。如果单击了单击我,则应显示上面的红色容器。与相同,按我

我的问题:我怎样才能意识到这样的事情?红色容器应显示在所有其他控件(z索引)上。
Canvas
是最佳选择吗?这个容器有多大

这个问题很抽象。我不想要任何解决方案,只是一些关于我应该使用的容器和它应该如何放置的想法


顺便提一个问题

我是否应该在XAML中创建红色容器,并且只更改
可见性的状态
?还是应该用C#创建红色容器?在性能方面



也许搜索一些关键字就足够了。因为我不知道怎么称呼它。

这个网站更多的是给出答案,而不是加入基于观点的讨论。因此,本着事物的精神,并且因为用一个例子来回答这个问题要容易得多,所以我将如何回答这个问题

<Grid>
  <Grid.RowDefinitions>
    <RowDefinition />
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
  </Grid.RowDefinitions>

  <Border x:Name="Container1" HorizontalAlignment="Left" Width="120" Height="100"
          Grid.Row="1" BorderBrush="Red" BorderThickness="1" Visibility="Hidden" />
  <Border x:Name="Container2" HorizontalAlignment="Right" Width="120" Height="100"
          Grid.Row="1" BorderBrush="Red" BorderThickness="1" Visibility="Hidden" />

  <Button x:Name="Button1" HorizontalAlignment="Left" Width="100" Height="30"
          Grid.Row="2" Content="Press Me" Click="Button1_Click" />
  <Button x:Name="Button2" HorizontalAlignment="Right" Width="100" Height="30"
          Grid.Row="2" Content="Click Me" Click="Button2_Click" />
</Grid>
1。我怎么能意识到这一点?红色容器应显示在所有其他控件(z索引)上。

这是直截了当的,将我上面示例中的
元素放在XAML的底部会使它位于其他所有控件的顶部,因为元素在默认情况下是基于它们在XAML中的级联顺序放置在z索引上的

2。帆布是最佳选择吗?

除非您的顶级容器(窗口、页面、用户控件)具有固定的宽度和高度,否则我建议使用能够更好地处理用户调整其大小的容器。如果使用画布,并且用户能够更改顶级容器的大小,则每次调整顶级容器的大小以保持其位置时,都必须手动重新定位按钮和边框元素

3。这个容器的大小是多少?

这完全取决于您希望布局的大小,在本例中,我在元素上添加了大小,这些元素将在340 x 340像素的最小容器大小中正确显示

4。我应该在XAML中创建红色容器并只更改可见性状态吗?还是应该用C#创建红色容器?在性能方面。


在XAML中放置“容器”元素是最好的选择,但老实说,您不会注意到速度上的差异。将它们放在XAML中的唯一优点是它更干净。

在性能方面
-我认为无论采用哪种方式,您都不会注意到有多大的不同。@VisualIncent感谢您的评论。你能告诉我如何定位它吗?对不起,WPF并不是我最强的一面。谢谢你的回答!将
网格
置于所有其他元素之上的想法非常好。我没想过这个。
private void Button1_Click(object sender, RoutedEventArgs e)
{
    bool isVisible = Container1.Visibility == Visibility.Visible;
    Container1.Visibility = isVisible ? Visibility.Hidden : Visibility.Visible;
}

private void Button2_Click(object sender, RoutedEventArgs e)
{
    bool isVisible = Container2.Visibility == Visibility.Visible;
    Container1.Visibility = isVisible ? Visibility.Hidden : Visibility.Visible;
}