2013-12-09 18 views
6

グリッドを含むWPFアプリケーションがあります。グリッドは3つの列に分割され、3つ目のグリッドは負荷時に幅がゼロになります。グリッド列の表示と非表示を切り替えるWPF DataTrigger XAML

私は他の2つの列に2つのデータグリッドを持っています。一方のデータグリッド内の選択されたアイテムが変更されると、他方のデータグリッドが変更され、値、すなわちマスター詳細テンプレートが表示される。これはすべて正常に動作します。

データグリッドに1つの値があります。この値を選択すると、この3番目の列の幅を0から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> 
+1

私はユーザーの視認性を超えて幅を – Paparazzi

+0

他の列のサイズが表示されていない場合に影響を与えますか? – mHelpMe

+0

私は見た目を崩壊させ、隠してみました。しかし、何も起こっていないようです。 3列目はまだ他の2列のサイズに影響を与えているように見えます – mHelpMe

答えて

17

正しいDataTriggerを使用すると、これは完全に可能です。まず、変更するUI要素... ColumnDefinition、ないGridTriggerを追加します。

<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ではありません。そうでなければ、ColumnDefinition要素のWidthは、DataTriggerから設定された値を上書きします。

+0

もう一度ありがとうございます!完璧! – mHelpMe

+0

あなたは私の日を救う! – GreenEyedAndy

関連する問題