2015-11-24 53 views
0

我想在DataTrigger.Based值我設置特定的DataGridRow的背景使用WPF複選框的IsChecked屬性。WPF:在DataTrigger中使用複選框IsChecked屬性

我不工作的代碼

<Style TargetType="{x:Type DataGridRow}"> 
       <Setter Property="Background" Value="LightGray" /> 
       <Setter Property="SnapsToDevicePixels" Value="true"/> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=chkbox, Path=IsChecked}" Value="true"> 
         <Setter Property="Background" Value="LightCyan" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 

<DataGrid x:Name="dataGrid1" AutoGenerateColumns="False"> 
       <DataGrid.Columns> 
        <DataGridTemplateColumn MinWidth="40" Width="Auto" Header="Select"> 
         <DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <CheckBox x:Name="chkbox" IsChecked="{Binding Selected, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"></CheckBox> 
          </DataTemplate> 
         </DataGridTemplateColumn.CellTemplate> 

        </DataGridTemplateColumn> 

      </DataGrid.Columns> 
    </DataGrid> 

然後我檢查這個link和改變了代碼如下,它是工作fine.Here 選擇是我的公共財產。

<Style TargetType="{x:Type DataGridRow}"> 
       <Setter Property="Background" Value="LightGray" /> 
       <Setter Property="SnapsToDevicePixels" Value="true"/> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Selected}" Value="true"> 
         <Setter Property="Background" Value="LightCyan" /> 
         </DataTrigger> 
       </Style.Triggers> 
      </Style> 

請幫我理解爲什麼我原來的代碼不工作?我錯過了什麼。
谷歌沒有幫助。令人驚訝的是,也沒有這個線程也!感謝您的幫助。

回答

2

原始代碼不工作,因爲你試圖通過ElementName它存在的模板對象,因此直到不創建後綁定嘗試解決定位的對象。通常,在引用可視樹中的祖先對象時,應該只使用ElementName,而不是兒童,特別是模板化的兒童。

正如評論所說,它也不可能使用{RelativeSource FindAncestor...這裏結合,因爲CheckBox是一個孩子,而不是一個祖先,的DataGridRow

+0

我們可以使用FindAncestor和AncestorLevel在這種結合? – Marshal

+1

@NirajDoshi我不這麼認爲,因爲CheckBox是DataGridRow的子元素,而不是祖先。我建議在你的DataTrigger中使用綁定值,就像你在第二個代碼塊中一樣。 – Rachel

+0

@Rachel:有道理。感謝澄清。 – Marshal

相關問題