簡體   English   中英

WPF DataTrigger顯示和隱藏網格列XAML

[英]WPF DataTrigger to display and hide grid column XAML

我有一個包含網格的WPF應用程序。 網格被分成3列,第3個網格在加載時具有零寬度。

我在另外兩列中有兩個數據網格。 當其中一個datagrid中的所選項更改時,其他datagrid會更改其顯示值,即主詳細信息模板。 一切正常。

數據網格中有一個值,如果選中,我希望第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>

使用正確的DataTrigger ,這是完全可能的。 首先,將Trigger添加到要更改的UI元素... ColumnDefinition ,而不是Grid

<ColumnDefinition>
    <ColumnDefinition.Style>
        <Style TargetType="{x:Type ColumnDefinition}">
            <Setter Property="Width" Value="10" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding OrderSelected.Name}" Value="Mark">
                    <Setter Property="Width" Value="2*" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ColumnDefinition.Style>
</ColumnDefinition>

接下來,不要在ColumnDefinition元素上設置Width ,而是在Style設置Width 否則, WidthColumnDefinition元素將覆蓋從設置的值DataTrigger

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM