2009-02-11 10 views
6

Próbuję ustawić wyzwalacz, aby wyświetlał blok tekstu, gdy wartość, którą otrzymuję dla komórki, jest określonego typu.Wyzwalacze WPF

Udało mi się wyświetlić obraz w tej samej sytuacji, ale w takich okolicznościach nie chcę obrazu, ale tekstu.

Skomentowałem linie w celu przetestowania. Aby to działało. Skomentowany kod działa! Tekst textblock = xxx w środku, nie ma.

To jest moje próby (y)

<wpfToolkit:DataGridTemplateColumn Header="P" Width="20"> 
    <wpfToolkit:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <!-- <DataTemplate.Triggers> --> 
      <!-- <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="1"> --> 
      <TextBlock Text="XXX" /> 
      <!-- </DataTrigger> --> 
      <!-- <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="2"> --> 
      <!-- <Setter TargetName="cablePrecedenceIndicatorImage" Property="Source" Value="Resources\Images\small_exclamation_mark.png"/> --> 
      <!-- </DataTrigger> --> 
      <!-- </DataTemplate.Triggers> --> 
     </DataTemplate> 
    </wpfToolkit:DataGridTemplateColumn.CellTemplate> 
</wpfToolkit:DataGridTemplateColumn> 
+0

ktoś zjadł twój fragment kodu .. – Gishu

+0

tak, nie mogę wymyślić, jak dodać! – mike

+0

udało się, dzięki Cameron! – mike

Odpowiedz

4

Ustaw zawartość DataTemplate na TextBlock i ustaw widoczność na podstawie wyzwalacza. Nie jestem pewien, co drugi DataTrigger jest, ponieważ odnosi się do nazwy docelowej, która nie istnieje w bieżącym zakresie, więc nie wiem, jak to pasuje.

<DataTemplate> 
    <TextBlock x:Name="block" Text="XXX" Visibility="Collapsed"/> 
    <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="1"> 
      <Setter TargetName="block" Property="Visibility" Value="Visible"/> 
     </DataTrigger> 
     <!--<DataTrigger Binding="{Binding PrecedenceIndicator}" Value="2"> 
      <Setter TargetName="cablePrecedenceIndicatorImage" Property="Source" Value="Resources\Images\small_exclamation_mark.png"/> 
     </DataTrigger>--> 
    </DataTemplate.Triggers> 
</DataTemplate> 
+0

Awesome, thanks! Zobacz moją "odpowiedź" na dole! – mike

0

trzeba zmienić typ DataTemplate, opartego na spuście, z obrazu w polu tekstowym.

<DataTemplate> 
    <ContentPresenter x:Name="Presenter" /> 

    <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="1"> 
      <Setter TargetName="Presenter" Property="Content"> 
       <Setter.Value> 
        <TextBlock Text="XXX" /> 
       </Setter.Value> 
      </Setter> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="2"> 
      <Setter TargetName="cablePrecedenceIndicatorImage" Property="Source" Value="Resources\Images\small_exclamation_mark.png"/> 
     </DataTrigger> 
    </DataTemplate.Triggers> 
</DataTemplate> 
+0

Znacznik "DataGridTemplateColumn.Resources" nie istnieje w przestrzeni nazw XML 'clr-namespace: Microsoft.Windows.Controls; assembly = WPFToolkit' – mike

+0

zamknij! "System.Windows.Controls.TextBlock" nie jest poprawną wartością "Setter.Value"; wartości wyprowadzone z Visual lub ContentElement nie są obsługiwane. – mike

1

Brilliant! Dzięki stosy :)

Tak właśnie skończyłem. Jeśli PrecedenceIndicator = 1, wyświetlaj!, Jeśli PrecendenceIndicator = 2, wyświetlaj !!.

<wpfToolkit:DataGridTemplateColumn Header="A" Width="20"> 
    <wpfToolkit:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock> 
       <TextBlock x:Name="block1" Text="&#x21;" Visibility="Collapsed"/> 
       <TextBlock x:Name="block2" Text="&#x21; &#x21;" Visibility="Collapsed"/> 
      </TextBlock> 
      <DataTemplate.Triggers> 
       <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="1"> 
        <Setter TargetName="block1" Property="Visibility" Value="Visible"/> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="2"> 
        <Setter TargetName="block2" Property="Visibility" Value="Visible"/> 
       </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 
    </wpfToolkit:DataGridTemplateColumn.CellTemplate> 
</wpfToolkit:DataGridTemplateColumn> 
+0

Wygląda świetnie! Cieszę się, że to się udało. –

Powiązane problemy