WPF将容器放在固定位置

时间:2017-03-18 18:25:54

标签: c# wpf

我想在一个固定的位置放置一个容器(包含任何自定义内容,例如ListView,...)。按下按钮时应出现容器。看看这张图片:

img

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

我的问题:我怎么能意识到这样的事情?红色容器应出现在所有其他控件(z-index)上。 Canvas是最佳选择吗?这个容器的大小是多少?

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

顺便问一个问题。

我应该在XAML中创建红色容器并仅更改visiblity的状态吗?或者我应该在C#中创建红色容器?在性能方面。

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

1 个答案:

答案 0 :(得分:2)

此网站更多的是提供答案,而不是根据意见添加讨论。所以本着事物的精神,并且因为通过一个例子来回答这个问题要容易得多,这就是我将如何去做。

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

对于后面的代码,我会做这样的事情:

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;
}

<强> 1。我怎么能意识到这样的事情呢?红色容器应显示在所有其他控件上(z-index)。

这是直截了当的,将我上面示例中的<Grid>元素放在XAML的底部将使其位于每个其他控件的顶部,因为元素默认放在z-index基础上他们在XAML中的级联顺序。

<强> 2。 Canvas是最佳选择吗?

除非你的顶级容器(Window,Page,UserControl)具有固定的宽度和高度,否则我建议坚持使用能够更好地处理用户调整大小的容器的容器。如果您使用了Canvas并且用户能够更改顶级容器的大小,则每次调整顶级容器以保持位置时,您都必须手动重新定位按钮和边框元素。

第3。关于这个容器的大小是什么?

这完全取决于您希望制作布局的大小,在示例中,我在元素上放置尺寸,这些元素可以在最小容器尺寸为340 x 340像素的情况下正确显示。

<强> 4。我应该在XAML中创建红色容器,只改变visiblity的状态吗?或者我应该在C#中创建红色容器?在表现方面。

放置&#34;容器&#34;你的XAML中的元素是你最好的选择,但老实说你不会注意到速度上的差异。将它们放入XAML的唯一好处是它更清洁。