5

コントロール内のいくつかの要素に色を提供するために、次のようなブラシ リソースを使用するユーザー コントロールがあります。

        <UserControl.Resources>
            <SolidColorBrush x:Key="BlackBrush" Color="Black"/>
        </UserControl.Resources>

ここで、トリガーを使用してこのリソースの色を変更し、特定の条件が発生したときにハイライトを提供したいと考えています。

これは可能ですか?もしそうなら、どのように?

ありがとう!

4

3 に答える 3

3

xamlのトリガーからリソースの色を変更できるとは思いません。

コードビハインドで色を変更するか、SolidColorBrushの色をオブジェクトのデータバインドプロパティに設定できます。

SolidColorBrush myBrush = (SolidColorBrush)this.TryFindResource("BlackBrush");

if (myBrush != null)
{
    myBrush.Color = Colors.Yellow;
}

それ以外の場合は、トリガーに基づいてブラシを交換する必要があります。以下に例を示します。

   <Grid Margin="50">
      <Grid.Resources>
         <SolidColorBrush x:Key="BlackBrush" Color="Black"/>
         <SolidColorBrush x:Key="WhiteBrush" Color="White"/>

         <Style x:Key="test" TargetType="TextBlock">

           <Setter Property="Background" Value="{StaticResource BlackBrush}"/>

            <Style.Triggers>
               <Trigger Property="Text" Value="white">
                  <Setter Property="Background" Value="{StaticResource WhiteBrush}"/>
               </Trigger>
               <Trigger Property="Text" Value="black">
                  <Setter Property="Background" Value="{StaticResource BlackBrush}"/>
               </Trigger>
            </Style.Triggers>
         </Style>

      </Grid.Resources>
      <TextBlock
         Height="20"
         Margin="50"
         Padding="50"
         Style="{StaticResource test}"
         Text="white">
      </TextBlock>
   </Grid>

これにより、テキスト値に基づいて背景色が変更されます。テキストが白の場合、背景は白、黒、そして背景は黒です。

于 2012-10-05T22:30:17.660 に答える
2

いいえ、XAMLを実行することはできませんが、問題は、他のコントロールの状態に基づいて一部のコントロールを変更したいということです。

少なくとも次のオプションがあります(このスレッドを見てください):

  • 要素を1つのコンテンツテンプレートに含めることができる場合は、トリガーを使用して、セッターがターゲット要素を指すようにSourceNameとTargetNameを指定できます。
  • また、要素でEventTriggersを使用でき、次のようになります。

    <StackPanel>
    <Label Margin="10" x:Name="lbl">My Label</Label>
    <Button Width="150" Height="100" Background="Yellow" x:Name="btn1">My Button
    </Button>
    <StackPanel.Triggers>
        <EventTrigger RoutedEvent="Button.MouseMove" SourceName="btn1">
            <EventTrigger.Actions>
                <BeginStoryboard>
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="lbl" Storyboard.TargetProperty="(Label.Background)">
                            <DiscreteObjectKeyFrame KeyTime="0:0:0">
                                <DiscreteObjectKeyFrame.Value>
                                    <SolidColorBrush Color="Yellow"/>
                                </DiscreteObjectKeyFrame.Value>
                            </DiscreteObjectKeyFrame>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger.Actions>
        </EventTrigger>
        <EventTrigger RoutedEvent="Button.MouseLeave" SourceName="btn1">
            <EventTrigger.Actions>
                <BeginStoryboard>
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="lbl" Storyboard.TargetProperty="(Label.Background)">
                            <DiscreteObjectKeyFrame KeyTime="0:0:0">
                                <DiscreteObjectKeyFrame.Value>
                                    <SolidColorBrush Color="White"/>
                                </DiscreteObjectKeyFrame.Value>
                            </DiscreteObjectKeyFrame>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger.Actions>
        </EventTrigger>
    </StackPanel.Triggers>
    

于 2012-10-05T22:44:03.460 に答える
2

ブラシを作成し、その「Color」プロパティを隠しコントロールの「Foreground.Color」プロパティにバインドできます。このブラシはどこでも使用でき、トリガーが実行されると色が変わります。

<Grid Background="Black">
    <Grid.Resources>
      <SolidColorBrush x:Key="BrushForeground" Color="{Binding ElementName=collapsedControl, Path=Foreground.Color}" />
      <SolidColorBrush x:Key="BrushGreen" Color="Lime" />
      <SolidColorBrush x:Key="BrushRed" Color="Red" />
    </Grid.Resources>
    <Control Name="collapsedControl" Visibility="Collapsed">
      <Control.Style>
        <Style TargetType="Control">
          <Setter Property="Foreground" Value="{StaticResource BrushGreen}" />
          <Style.Triggers>
            <DataTrigger Binding="{Binding IsIncorrect}" Value="True">
              <Setter Property="Foreground" Value="{StaticResource BrushRed}" />
            </DataTrigger>
          </Style.Triggers>
        </Style>
      </Control.Style>
    </Control>
    <Label Content="Sample Text" Foreground="{StaticResource BrushForeground}" />
    <Button Width="150"
            Height="50"
            Click="Button_Click"
            Content="Set IsIncorrect to true" />
  </Grid>
于 2020-11-11T11:11:51.093 に答える