2016-01-06 2 views
0

Это просто образец кодаКак отключить DataTrigger на основе ситуации в WPF XAML?

В примере кода, я имею 3 кнопки. Каждая кнопка «Видимость» сворачивается по умолчанию, она будет видимой во время мышки на соответствующей сетке или границе.

Названия 3 кнопки являются

  1. SupremeButton
  2. PowerButton
  3. StarButton

PowerButton имеет дополнительный триггер, когда кнопка получает Видимый то превращает Background цвет в BlueViolet. Но по умолчанию Background Цвет BurlyWood

Кроме того, для настройки видимости в PowerButton есть еще два DataTriggers.

  • Если SupremeButton получает видимость Visible то PowerButton превращает видимость Visible
  • Если StarButton получает видимость Visible то PowerButton превращает видимость Visible

    Здесь мое требование мне нужно отключить в DataTrigger Цвет фона для вышеупомянутых двух данных DataTrigger получает эффект. Результат должен быть по умолчанию Цвет BurlyWood.

Примечание: Не добавляйте условие в сказанное DataTrigger, чтобы установить цвет фона к BurlyWood. Поделитесь своей идеей, как сделать байк DataTrigger.

My Sample WPF XAML Исходный код

<Grid> 
    <Border x:Name="m_Border" Width="100" Height="30" HorizontalAlignment="Center" VerticalAlignment="Top" Background="#FFF2FFC6" Margin="0,20,0,0"> 
     <Button x:Name="SupremeButton" Content="iApp" HorizontalAlignment="Center" VerticalAlignment="Center" Width="75" > 
      <Button.Style> 
       <Style> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding ElementName=m_Border, Path=IsMouseOver}" Value="false"> 
          <Setter Property="Button.Visibility" Value="Collapsed"></Setter> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Button.Style> 
     </Button> 
    </Border> 
    <Grid x:Name="grid" Width="100" Height="30" HorizontalAlignment="Center" VerticalAlignment="Top" Background="#FFF2FFC6" Margin="0,60,0,0"> 
     <Button x:Name="PowerButton" Content="iApp" HorizontalAlignment="Center" VerticalAlignment="Center" Background="BurlyWood" Width="75" > 
      <Button.Style> 
       <Style> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding ElementName=grid, Path=IsMouseOver}" Value="false"> 
          <Setter Property="Button.Visibility" Value="Collapsed"></Setter> 
         </DataTrigger> 
         <DataTrigger Binding="{Binding ElementName=PowerButton, Path=Visibility}" Value="Visible"> 
          <Setter Property="Button.Background" Value="BlueViolet"></Setter> 
         </DataTrigger> 

         <!-- Visibilty is set by Outer Button --> 
         <DataTrigger Binding="{Binding ElementName=SupremeButton, Path=Visibility}" Value="Visible"> 
          <Setter Property="Button.Visibility" Value="Visible"></Setter> 
         </DataTrigger> 
         <DataTrigger Binding="{Binding ElementName=StarButton, Path=Visibility}" Value="Visible"> 
          <Setter Property="Button.Visibility" Value="Visible"></Setter> 
         </DataTrigger> 

        </Style.Triggers> 
       </Style> 
      </Button.Style> 
     </Button> 
    </Grid> 
    <Border x:Name="n_Border" Width="100" Height="30" HorizontalAlignment="Center" VerticalAlignment="Top" Background="#FFF2FFC6" Margin="0,100,0,0"> 
     <Button x:Name="StarButton" Content="iApp" HorizontalAlignment="Center" VerticalAlignment="Center" Width="75" > 
      <Button.Style> 
       <Style> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding ElementName=n_Border, Path=IsMouseOver}" Value="false"> 
          <Setter Property="Button.Visibility" Value="Collapsed"></Setter> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Button.Style> 
     </Button> 
    </Border> 
</Grid> 
+0

Я не понимаю, чего вы пытаетесь достичь. Когда я тестирую ваш XAML, PowerButton всегда * BurlyWood, независимо от того, какая кнопка мыши закончилась. Вы хотите, чтобы PowerButton был BlueViolet только тогда, когда мышь находится над одной из двух других кнопок? И BurlyWood, когда мышь над PowerButton сама? –

+0

По умолчанию он должен быть «BurlyWood» во время мышки Hover с соответствующей сеткой, он должен перейти к «BlueViolet». Остальная часть кнопки Hover должна быть «BurlyWood». Пожалуйста, обратитесь к разделу «Примечание». –

ответ

0

Я надеюсь, что я понял, что вам нужно. Когда мышь находится над PowerButton, она появится с фоном BlueViolet. Когда мышь находится над одной из двух других кнопок, PowerButton появится с фоном BurlyWood.

Вот измененное "PowerButton" XAML: -

<Button x:Name="PowerButton" Content="iApp" HorizontalAlignment="Center" VerticalAlignment="Center" Width="75" > 
     <Button.Style> 
      <Style TargetType="{x:Type Button}"> 
       <Setter Property="Background" Value="BlueViolet" /> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=grid, Path=IsMouseOver}" Value="false"> 
         <Setter Property="Button.Visibility" Value="Collapsed"></Setter> 
        </DataTrigger> 

        <!-- Visibilty is set by Outer Button --> 
        <DataTrigger Binding="{Binding ElementName=SupremeButton, Path=Visibility}" Value="Visible"> 
         <Setter Property="Button.Visibility" Value="Visible"></Setter> 
         <Setter Property="Background" Value="BurlyWood" /> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding ElementName=StarButton, Path=Visibility}" Value="Visible"> 
         <Setter Property="Button.Visibility" Value="Visible"></Setter> 
         <Setter Property="Background" Value="BurlyWood" /> 
        </DataTrigger> 

       </Style.Triggers> 
      </Style> 
     </Button.Style> 
    </Button> 

Проблема была с атрибутом Background в <Button> элемент, который я удалил. (Значения атрибутов в XAML элемента управления изменяют любые значения, установленные в стилях и триггерах, поэтому PowerButton всегда был бы BurlyWood).

В моей версии я теперь установил фон кнопки BlueViolet в разделе <Style>. Установка значения по умолчанию со стилем <Setter> (а не в <Button> XAML) позволяет триггерам переопределять значение.Я также удалил ваш триггер, чтобы изменить фон на BlueViolet, так как теперь он лишний.

Остальные триггеры остаются неизменными. Они изменят фон на BurlyWood, когда мышь находится над одной из других двух кнопок.

+0

Пожалуйста, обратитесь в раздел примечаний. –