2016-04-06 2 views
0

Ich habe einen RowStyle in XAML in einem Stil definiert ein Datagrid-Targeting:Wpf Datagrid RowStyle Wie entweder Bild oder Pinsel für Hintergrund verwenden

<Style x:Key="DataGridStyle" TargetType="{x:Type DataGrid}"> 
<!-- Bunch of other setters --> 
<Setter Property="RowStyle"> 
    <Setter.Value> 
     <Style TargetType="{x:Type DataGridRow}"> 
      <Setter Property="Background"> 
       <Setter.Value> 
        <MultiBinding Converter="{StaticResource DataGridRowBgConverter}"> 
         <Binding Path="IsThis" /> 
         <Binding Path="IsThat" /> 
        </MultiBinding> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Setter.Value> 
</Setter> 

Einige Datagrids eine RowStyle benötigt, die ein Bild für den Hintergrund verwendet, gezeigt werden, wenn eine bestimmte Eigenschaft wahr ist.
Ich habe die Multibinding geändert, um den Datenkontext als dritten Wert zu übergeben, und den Konverter geändert, um den DC zu untersuchen, um festzustellen, ob ein Image erforderlich ist.
Ich kann jedoch nicht herausfinden, wie das XAML zu strukturieren.
UPDATE:
Dies scheint zu funktionieren, außer TwoWay-Bindung zu setzen, muss ich einen Pfad angeben.

<Setter Property="Background"> 
     <Setter.Value> 
     <ImageBrush Binding="{Binding Converter={StaticResource DataGridRowImageConverter}}" /> 
     </Setter.Value> 
    </Setter> 

Wie funktioniert die Bindung Weg an die DC binden eingerichtet bekommen (das Äquivalent von <Binding />)? Die Bindung in der obigen xaml gibt mir die notwendige DC; Wie drücke ich das Gleiche mit dem Pfad aus?
Danke für alle Einsichten ....

Antwort

0

Sie können nicht mehr als 1 Setter für die gleiche Eigenschaft haben. Sie können einen DataTrigger für den Stil verwenden, um den Hintergrund für einen ImageBrush gemäß den Eigenschaften des DataContext festzulegen. Es würde ungefähr so ​​aussehen:

<Style x:Key="DataGridStyle" TargetType="{x:Type DataGrid}"> 
    <!-- Bunch of other setters --> 
    <Setter Property="RowStyle"> 
    <Setter.Value> 
     <Style TargetType="{x:Type DataGridRow}"> 
      <Setter Property="Background"> 
       <Setter.Value> 
        <MultiBinding Converter="{StaticResource DataGridRowBgConverter}"> 
         <Binding Path="IsThis" /> 
         <Binding Path="IsThat" /> 
        </MultiBinding> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Setter.Value> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=PropertyToIndicateImageBackground}" Value="True"> 
      <Setter Property="Background"> 
       <ImageBrush ImageSource="YourImage.jpg"/> 
      </Setter> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 
+0

Danke für die Antwort. Wir kennen weder den Namen der Eigenschaft, die die Verwendung des Bildes auslöst, noch die imageSource, bis das Datagrid erstellt wurde. In Ihrem Beispiel kann der DataTrigger an den DC binden? Ich werde damit experimentieren ... – Number8

+0

Sie sollten in der Lage sein, an den DC zu binden. Sie benötigen dann einen Konverter, um True/False für die Bindung für den DataTrigger zurückzugeben – Brian

Verwandte Themen