2016-10-19 24 views
0

WPFで比較的新しいです。XAMLファイルは、いくつかのコードが頻繁に繰り返されるため、さらに複雑で混乱します。いくつかの簡単な方法は、コードをよりよく、より短く見えるようにする方法ですか?たとえば、DataGridColumnTemplateが常に同じで、データソースとヘッダー名だけが異なるDataGridがあります。あなたの正確な状況でWPFでのスタイルの繰り返しを避ける方法

<DataGridTemplateColumn Header="Web"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="auto" /> 
           <ColumnDefinition Width="auto" /> 
          </Grid.ColumnDefinitions> 
          <CheckBox Grid.Column="0" Margin="4,0" IsChecked="{Binding Webs.IsSelected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> 
           <CheckBox.Style> 
            <Style TargetType="CheckBox"> 
             <Style.Triggers> 
              <DataTrigger Binding="{Binding Webs}" Value="{x:Null}"> 
               <Setter Property="IsEnabled" Value="false"></Setter> 
              </DataTrigger> 
             </Style.Triggers> 
            </Style> 
           </CheckBox.Style> 
          </CheckBox> 
          <Button Grid.Column="1" Content="Detail" Margin="3,1" /> 
         </Grid> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

      <DataGridTemplateColumn Header="Flange"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="auto" /> 
           <ColumnDefinition Width="auto" /> 
          </Grid.ColumnDefinitions> 
          <CheckBox Grid.Column="0" Margin="4,0" IsChecked="{Binding Flanges.IsSelected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> 
           <CheckBox.Style> 
            <Style TargetType="CheckBox"> 
             <Style.Triggers> 
              <DataTrigger Binding="{Binding Flanges}" Value="{x:Null}"> 
               <Setter Property="IsEnabled" Value="false"></Setter> 
              </DataTrigger> 
             </Style.Triggers> 
            </Style> 
           </CheckBox.Style> 
          </CheckBox> 
          <Button Grid.Column="1" Content="Detail" Margin="3,1" /> 
         </Grid> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
+0

あなたはここで行うことができますベスト
Using WPF styles
はResources' 'へCellTemplate'' '内のあなたのDataTemplate'をシフトです。 – AnjumSKhan

答えて

0

null値がコントロールを無効にする必要がある場合、直接IsEnabledを結合して、null

<CheckBox Grid.Column="0" Margin="4,0" 
      IsChecked="{Binding Flanges.IsSelected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
      IsEnabled="{Binding Path=Flanges, TargetNullValue=false}"/> 

を交換するTargetNullValueに頼る失礼ハックがあるが、これは時にいくつかのバインドエラーを生成しますプロパティがnullではありません

"BindingExpressionによって生成された値は、ターゲットプロパティに対して有効ではありません。ターゲット要素は 'CheckBox'であり、ターゲットプロパティは 'IsEna bled '(type' Boolean ') "

nullをチェックしてバインディングに使用する特殊な値を持つようにします。スタイルを定義するNull To Boolean IValueConverter not working

0

を繰り返し、コードの再利用やスタイルを短縮する一般的な方法である:それはまた、関連の質問を参照DataTrigger

IsEnabled="{Binding Path=Flanges, Converter={StaticResource IsNullConverter}}" 

を書くよりもはるかに短いです。
あなたは、WPFのスタイルについて学ぶために、以下のリンクをたどることができます。Styling and Templating
Walkthrough: Styling WPF Content

関連する問題