gpt4 book ai didi

WPF SharedSizeGroup GridSplitter 问题

转载 作者:行者123 更新时间:2023-12-02 02:13:40 26 4
gpt4 key购买 nike

我希望使用网格作为我的顶级布局。网格将有 1 列和 n 行。网格中的每一行还应包含一个 3 列 1 行的网格。第二列是 GridSplitter,我尝试使用 SharedSizeGroup,以便更改所有嵌套网格中第一列的大小。

这就是我所拥有的...并且它可以工作!!...好吧...如果您单击拆分器并调整大小而不放开它,它就可以工作...但是出于某种原因,如果您调整某些内容的大小并让移动鼠标,然后尝试使用似乎“粘住”的不同行来调整大小。

有什么想法吗?

<!-- Parent Grid -->
<Grid Grid.IsSharedSizeScope="True">
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>

<!-- First Grid -->
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="A" Width="Auto"></ColumnDefinition>
<ColumnDefinition SharedSizeGroup="B" Width="Auto"></ColumnDefinition>
<ColumnDefinition SharedSizeGroup="C" Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>

<Label Grid.Column="0">One-Left</Label>
<GridSplitter Grid.Column="1" Width="5" Background="DarkGray"></GridSplitter>
<Label Grid.Column="2">One-Right</Label>
</Grid>

<!-- Second Grid -->
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="A" Width="Auto"></ColumnDefinition>
<ColumnDefinition SharedSizeGroup="B" Width="Auto"></ColumnDefinition>
<ColumnDefinition SharedSizeGroup="C" Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>

<Label Grid.Column="0">Two-Left</Label>
<GridSplitter Grid.Column="1" Width="5" Background="DarkGray"></GridSplitter>
<Label Grid.Column="2">Two-Right</Label>
</Grid>

</Grid>

最佳答案

重新发布我的回答 ms connect :

您通常可以通过不使用 SharedSizeGroup 并将所有共享大小绑定(bind)到一个对象(例如您的数据上下文)上的单个属性来解决此问题:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:WpfApplication3"
Height="350" Width="525" Title="MainWindow">

<Window.DataContext>
<my:MainWindowData Width0="1*" Width1="1*" />
</Window.DataContext>

<Window.Resources>

<DataTemplate x:Key="dt">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding Path=Width0, Mode=TwoWay}" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="{Binding Path=Width1, Mode=TwoWay}" />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Content="{Binding Width0}" />
<GridSplitter Grid.Column="1" Width="10" ResizeBehavior="PreviousAndNext" ResizeDirection="Columns" />
<Button Grid.Column="2" Content="{Binding Width1}" />
</Grid>
</DataTemplate>

</Window.Resources>

<StackPanel>
<ContentPresenter Content="{Binding}" ContentTemplate="{StaticResource dt}" />
<ContentPresenter Content="{Binding}" ContentTemplate="{StaticResource dt}" />
</StackPanel>

</Window>

其中 Width0 和 Width1 是匹配类型 (GridLength)。它适用于任何类型的大小调整(固定、星型和自动)的任何组合。

更新:

或者也许更好的是,您可以纯粹在 XAML 中完成此操作,而不是绑定(bind)到 DataContext。只需定义一个带有命名列的主网格(不一定是父网格,但您需要某种方式来引用它),然后按名称绑定(bind)到它们。

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="350" Width="525" Title="MainWindow">

<!-- shared sizing used only on fixed size columns therefore safe -->
<!-- alternatively you can hardcode width of splitter column -->
<Grid Name="masterGrid" Grid.IsSharedSizeScope="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" Name="masterColumn0" />
<ColumnDefinition Width="Auto" SharedSizeGroup="masterColumn1" />
<ColumnDefinition Width="1*" Name="masterColumn2" />
</Grid.ColumnDefinitions>
<StackPanel Grid.ColumnSpan="3">
<StackPanel.Resources>
<DataTemplate x:Key="dt">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding Path=Width, Mode=TwoWay, ElementName=masterColumn0}" />
<ColumnDefinition Width="Auto" SharedSizeGroup="masterColumn1" />
<ColumnDefinition Width="{Binding Path=Width, Mode=TwoWay, ElementName=masterColumn2}" />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Content="{Binding Path=Width, Mode=TwoWay, ElementName=masterColumn0}" />
<Button Grid.Column="2" Content="{Binding Path=Width, Mode=TwoWay, ElementName=masterColumn2}" />
</Grid>
</DataTemplate>
</StackPanel.Resources>
<ContentPresenter ContentTemplate="{StaticResource dt}" />
<ContentPresenter ContentTemplate="{StaticResource dt}" />
</StackPanel>
<GridSplitter Grid.Column="1" Width="10" ResizeBehavior="PreviousAndNext" ResizeDirection="Columns" ShowsPreview="True" />
</Grid>

</Window>

这增加了使用所有网格共享的单个网格拆分器的好处。

关于WPF SharedSizeGroup GridSplitter 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1715124/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com