如何以切换WPF格列的可见性
-
10-07-2019 - |
题
我有一些麻烦这个工作在WPF应用程序,我的工作。基本上,我要的是什么样的任务窗格MMC:
- 该应用程序有三个列在的主要部分显示。我需要一个列在右边它是调整大小。我猜这意味着使用一个网与一个GridSplitter但任何工作。
- 我希望能够保存宽度的右侧列应用程序时关闭,并将其加载应用时被打开,但这应该是一个初始的大小:用户应当能够调整它。
- 当我调整大小的窗口中,我想要左右侧栏留相同的尺寸和中列调整与窗口的宽度。
- 左侧右侧列需要有一个最低的宽度。当我调整的右侧栏我想的中心柱得到更小的但不是左边一栏。
- 我也希望能够切换的可见度的右侧栏有一个开关按钮这是外面的柱和当它返回的可见度,我希望它是相同的宽度。
我试图做到尽可能多地在反馈与结合。
和我可以有它的虾酱奶油,冰淇淋和巧克力薯条,好吗?:-)
解决方案
因为我读了你的需求,而不是思维的一个 Grid
, 我想到一个 DockPanel
.
<DockPanel>
<Grid Name="right"
DockPanel.Dock="Right" MinWidth="100" />
<Grid Name="Left"
DockPanel.Dock="Left" MinWidth="100" />
<Grid Name="middle" />
</DockPanel>
如果你做的一种方式来调整 right
, 然后 middle
将改变 right
被调整。如果你调整大小的窗口中,只有 middle
会改变。储存和设置的 Width
的 right
是给你的,但应该不难。
作为对允许用户调整 right
, 那会有点棘手,但是我发现 这篇文章 这应该有所帮助。 这种其他的文章 可能会有帮助,甚至更多。
可见性的 right
, 你可以将它的 Visibility
要 Collapsed
把它藏起来,并恢复它通过设置它 Visible
.
注:小组内部不必要 Grid
s,但是你将要使用某种 Panel
每个。不管你在你的电流 Grid
列应该只是罚款。
其他提示
我使用网格与GridSplitters因为这使它真的很容易调整中列,同时保持宽度的左右列。
键
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="MainWindow"
Title="Main Window"
Width="640" Height="480">
<Grid>
<Grid.ColumnDefinitions>
<!-- Left column -->
<ColumnDefinition Width="200" MinWidth="100"/>
<!-- Left GridSplitter column -->
<ColumnDefinition Width="5"/>
<!-- Center column. A width of * means the column will fill
any remaining space. -->
<ColumnDefinition Width="*"/>
<!-- Right GridSplitter column -->
<ColumnDefinition x:Name="RightSplitterColumn" Width="5"/>
<!-- Right column -->
<ColumnDefinition x:Name="RightColumn" Width="200"
MinWidth="100"/>
</Grid.ColumnDefinitions>
<GridSplitter Grid.Column="1" HorizontalAlignment="Stretch" />
<GridSplitter Grid.Column="3" HorizontalAlignment="Stretch" />
<Button x:Name="ToggleButton" Grid.Column="2"
Content="Toggle Right Column" Width="150" Height="25"
Click="ToggleButton_Click" />
</Grid>
</Window>
代码隐藏
当躲在右栏,我只是设置列宽度为0因为网格列没有一个能见度的财产。
public partial class MainWindow : Window
{
private double rightColumnWidth;
private double rightColumnMinWidth;
private bool rightColumnHidden;
public MainWindow()
{
this.InitializeComponent();
}
private void ToggleButton_Click(object sender, RoutedEventArgs e)
{
if (rightColumnHidden)
{
// Restore the widths.
RightColumn.MinWidth = rightColumnMinWidth;
RightColumn.Width = new GridLength(rightColumnWidth);
RightSplitterColumn.Width = new GridLength(5);
}
else
{
// Remember the user-set widths for the columns.
rightColumnWidth = RightColumn.Width.Value;
rightColumnMinWidth = RightColumn.MinWidth;
// Remember to set the minimum width to 0 before changing the actual
// width.
RightColumn.MinWidth = 0;
RightColumn.Width = new GridLength(0);
RightSplitterColumn.Width = new GridLength(0);
}
rightColumnHidden = !rightColumnHidden;
}
}
作为保存和恢复的列宽启动时,我将仅存储宽度的变量,以设置一个文件,然后将其应用时应用重新开放。
设置columndefinition宽汽车,把一个内部控制,列和给星星的其他列。只要你想隐藏的列有内容中,设置控制。能见度=倒塌,由于列宽度是自动的,你不会看到,列和剩余的列将采取的空间。
3年后你可以找到另一种方法上的演示.
http://www.codeproject.com/Articles/437237/WPF-Grid-Column-and-Row-Hiding
它增加了一个"可见的"财产定义列定义。