我正在尝试Grid使用GridSplitter单击按钮时隐藏列中的列(该按钮将第三列中所有项目的可见性设置为折叠).如果我不移动GridSplitter它正常工作,第三列消失,但如果我移动GridSplitter内容消失但其他列不调整大小以填充空白空间.
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="25"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="a" Width="*"/>
<ColumnDefinition x:Name="b" Width="3"/>
<ColumnDefinition x:Name="c" Width="Auto" MaxWidth="600"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Grid.Row="0" HorizontalAlignment="Stretch" Background="Green">
<Image Source="te/Dante.png" Height="Auto" Margin="0,128,2,71"/>
</Border>
<Button Grid.Column="0" Grid.Row="0" Width="30" Height="30" Margin="0,10,10,0" HorizontalAlignment="Right" VerticalAlignment="Top" Click="Button_Click"></Button>
<GridSplitter Width="5" Grid.Column="1" Grid.Row="0" Grid.RowSpan="2" ResizeDirection="Columns" HorizontalAlignment="Left" Background="White" BorderBrush="Black" BorderThickness="1,0" ResizeBehavior="PreviousAndCurrent"/>
<WrapPanel x:Name="wpC" Grid.Column="2" Grid.Row="0" Grid.RowSpan="2" MinWidth="300" HorizontalAlignment="Stretch" Background="Aqua" Panel.ZIndex="-1"></WrapPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)
这是我的问题的一个例子(gif):
我怎么解决这个问题?可能尊重MVVM模式.
我有一个DataGrid显示一堆对象.这些对象有一个属性IsDetailsExpanded,我想将DataRows DetailsVisibility属性绑定到该属性.
我的第一种方法有效,但需要一些代码隐藏(我想摆脱它)
我处理这个LoadingRow事件
void LoadingRowHandler(object sender, DataGridRowEventArgs e)
{
Binding b = new Binding()
{
Source = e.Row.DataContext,
Path = new PropertyPath("IsExpanded"),
Converter = (IValueConverter)Resources["BoolToVisi"],
Mode = BindingMode.TwoWay
};
e.Row.SetBinding(DataGridRow.DetailsVisibilityProperty, b);
}
Run Code Online (Sandbox Code Playgroud)
我认为必须有一种方法可以在XAML中实现类似的功能,但不幸的是我没有丝毫的线索.有任何想法吗?建议?
TextBox的TextWrapping属性有三个可能的值:
我想绑定到MenuItem的IsChecked属性.如果选中了MenuItem,我想将TextBox的TextWrapping属性设置为Wrap.如果未选中MenuItem,我想将TextBox的TextWrapping属性设置为NoWrap.
总而言之,我试图将具有两个状态的控件绑定到具有两个以上值的枚举的两个值.
[edit]我想在XAML中完成这个,如果可能的话.
[edit]我想出了如何使用IValueConverter来做到这一点.也许有更好的方法来做到这一点?这是我做的:
在Window.Resources中,我声明了对ValueConverter的引用.
<local:Boolean2TextWrapping x:Key="Boolean2TextWrapping" />
Run Code Online (Sandbox Code Playgroud)
在我的TextBox中,我创建了与MenuItem的绑定,并在绑定语句中包含了Converter.
TextWrapping="{Binding ElementName=MenuItemWordWrap, Path=IsChecked, Converter={StaticResource Boolean2TextWrapping}}"
Run Code Online (Sandbox Code Playgroud)
而ValueConverter看起来像这样:
public class Boolean2TextWrapping : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo cultureInfo)
{
if (((bool)value) == false)
{
return TextWrapping.NoWrap;
}
return TextWrapping.Wrap;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)