2009-09-14 22 views
19

Este código funciona (cuando ControlType = "desplegable" entonces el fondo amarilla):¿Cómo puedo alternar la visibilidad de un TextBlock en un DataTrigger?

<Window x:Class="TestCollapsed.Views.MainView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:c="clr-namespace:TestCollapsed.Commands" 
    Title="Main Window" Height="400" Width="800"> 
    <Window.Resources> 
     <Style x:Key="DropDownStyle" TargetType="TextBlock"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ControlType}" Value="dropDown"> 
        <Setter Property="Background" Value="Yellow"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Window.Resources> 

    <StackPanel> 
     <TextBlock Visibility="Visible" 
        Text="This is going to be the dropdown control." 
        Style="{StaticResource DropDownStyle}"/> 
    </StackPanel> 
</Window> 

Pero este código no trabajo (cuando ControlType = "desplegable" entonces el TextBlock es todavía invisible):

<Window x:Class="TestCollapsed.Views.MainView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:c="clr-namespace:TestCollapsed.Commands" 
    Title="Main Window" Height="400" Width="800"> 
    <Window.Resources> 
     <Style x:Key="DropDownStyle" TargetType="TextBlock"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ControlType}" Value="dropDown"> 
        <Setter Property="Visibility" Value="Visible"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Window.Resources> 

    <StackPanel> 
     <TextBlock Visibility="Collapsed" 
        Text="This is going to be the dropdown control." 
        Style="{StaticResource DropDownStyle}"/> 
    </StackPanel> 
</Window> 

por qué no puedo establecer la visibilidad en un estilo que pueda fondo?

Respuesta

42

Está configurando la Visibilidad en el TextBlock y luego intenta anularlo con un estilo. Eso no funcionará Pruebe esto:

<Window x:Class="TestCollapsed.Views.MainView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:c="clr-namespace:TestCollapsed.Commands" 
    Title="Main Window" Height="400" Width="800"> 
    <Window.Resources> 
     <Style x:Key="DropDownStyle" TargetType="TextBlock"> 
      <Setter Property="Visibility" Value="Collapsed"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ControlType}" Value="dropDown"> 
        <Setter Property="Visibility" Value="Visible"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Window.Resources> 

    <StackPanel> 
     <TextBlock Text="This is going to be the dropdown control." 
        Style="{StaticResource DropDownStyle}"/> 
    </StackPanel> 
</Window> 
+10

que tenía que hacer este error 10 veces antes de que se hundió en –

+1

Sí, yo también.. Ahora es lo primero que busco cuando reviso el código con Triggers. –

+1

ese era exactamente el problema, gracias –

-1

Tengo el mismo problema. ¡La respuesta de @ Bryan es perfecta! Existen versiones incorrectas y correctas. La versión incorrecta:

<TextBlock Text="1999-09-09 16:08" VerticalAlignment="Top" Visibility="Collapsed"> 
           <TextBlock.Style> 
            <Style BasedOn="{StaticResource TipTextYellow}" TargetType="TextBlock"> 
             <Style.Triggers> 
              <DataTrigger Binding="{Binding ElementName=Alcohol,Path=IsFocused}" Value="True"> 
               <Setter Property="Visibility" Value="Visible"/> 
              </DataTrigger> 
             </Style.Triggers> 
            </Style> 
           </TextBlock.Style> 
          </TextBlock> 

la versión correcta:

<TextBlock Text="1999-09-09 16:08" VerticalAlignment="Top"> 
           <TextBlock.Style> 
            <Style BasedOn="{StaticResource TipTextYellow}" TargetType="TextBlock"> 
             <Setter Property="Visibility" Value="Collapsed"/> 
             <Style.Triggers> 
              <DataTrigger Binding="{Binding ElementName=Alcohol,Path=IsFocused}" Value="True"> 
               <Setter Property="Visibility" Value="Visible"/> 
              </DataTrigger> 
             </Style.Triggers> 
            </Style> 
           </TextBlock.Style> 
          </TextBlock> 
Cuestiones relacionadas