我正在尝试将DataGridTemplateColumn的宽度绑定到滑块以调整列的宽度。
当存在其他列以便显示水平滚动条时,列的大小调整无效。这是工作示例代码:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<x:Array x:Key="strings" Type="sys:String"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String>One</sys:String>
<sys:String>Two</sys:String>
</x:Array>
</Window.Resources>
<StackPanel>
<Slider Name="ImgWidth" Minimum="10" Maximum="500" TickFrequency="1" IsSnapToTickEnabled="True" Value="100"></Slider>
<DataGrid ItemsSource="{StaticResource strings}" CanUserAddRows="False" CanUserDeleteRows="False" IsSynchronizedWithCurrentItem="True" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Image" Width="{Binding ElementName=ImgWidth, Path=Value}" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border BorderBrush="Red" BorderThickness="5" Height="100" Width="{Binding ElementName=ImgWidth, Path=Value}"></Border>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Something else" Binding="{Binding}"/>
<DataGridTextColumn Header="Something else" Binding="{Binding}"/>
<DataGridTextColumn Header="Something else" Binding="{Binding}"/>
<DataGridTextColumn Header="Something else" Binding="{Binding}"/>
<DataGridTextColumn Header="Something else" Binding="{Binding}"/>
<DataGridTextColumn Header="Something else" Binding="{Binding}"/>
<DataGridTemplateColumn Width="*" />
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Window>
移动滑块时图像的大小调整有效,但无论我是将第一列的宽度设置为自动还是绑定,当我移动滑块时,它都不会在两个方向上缩放。 当水平滚动条不可见时,增加宽度有效但收缩不起作用。当显示水平滚动条时,调整列的大小不会在任何方向上起作用。
答案 0 :(得分:1)
这似乎有效。不是很漂亮,但它确实有效。
Slider x:Name =“ImgWidth”Minimum =“10”Maximum =“500”TickFrequency =“1”IsSnapToTickEnabled =“True”Value =“100”ValueChanged =“ImgWidth_ValueChanged”&gt;
DataGrid x:Name =“dg”...
并在代码中:
private void ImgWidth_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (dg != null)
{
dg.Columns[0].Width = ImgWidth.Value;
}
}