【问题标题】:WPF Changing column width at runtimeWPF 在运行时更改列宽
【发布时间】:2013-12-07 16:24:33
【问题描述】:

我有一个包含网格的 WPF 应用程序。网格被分成 3 列,加载时第三个网格的宽度为零。

我在另外两列中有两个数据网格。当其中一个数据网格中的选定项目更改另一个数据网格时,它会更改显示值,即主详细信息模板。这一切都很好。

数据网格中有一个值,如果选中,我希望第 3 列的宽度从零更改为 2*。我不知道该怎么做?

编辑

我希望通过 XAML 实现这一点。我一直在研究数据触发器和价值转换器。我在下面快速编写了一些代码进行测试。我已经读过将列设置为 width=0 可能在依赖属性设置优先级列表中更高。无论如何要这样做还是我需要使用后面的代码?

 <Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition Width="2*"/>
        <ColumnDefinition Width="0"/>
    </Grid.ColumnDefinitions>

    <DataGrid Grid.Column="0"
              ItemsSource="{Binding OrderList}"
              SelectedItem="{Binding OrderSelected}"                  
              AutoGenerateColumns="True">                                    
    </DataGrid>

    <TextBox Grid.Column="1" Text="{Binding OrderSelected.Name}">
    </TextBox>

    <Grid x:Name="columnHideSeek" Grid.Column="2" Background="Blue">
        <Grid.Style>
            <Style>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding OrderSelected.Name}" Value="Mark">
                        <Setter Property="Grid.Width" Value="10"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Grid.Style>
    </Grid>

</Grid>

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    您的 XAML 文件应如下所示:

    <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
            <ColumnDefinition Name="thirdColumn" Width="0"/>
        </Grid.ColumnDefinitions>
    </Grid>
    

    并在您的代码隐藏文件中选择数据网格事件范围:

    GridLength g2 = new GridLength(2, GridUnitType.Star);
    thirdColumn.Width = g2;
    

    【讨论】:

    • 您好,感谢您的回复。我希望通过 xaml 来实现这一点,并保持我想要实现的 mvvm 模式。我一直在研究数据触发器和值转换器,但不知道如何解决我的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 2018-10-09
    • 1970-01-01
    相关资源
    最近更新 更多