0

ボタンに定義されたカスタム スタイルがあります。テキストの折り返しを利用できるようにボタンの内側に a を配置したいのですが、コンテンツにTextBlocka を使用するとテキストが表示されません。TextBlock

デザイナーでは次のように表示されます。

目に見えないテキスト

は次のButtonように定義されます。

<Button HorizontalAlignment="Center"
        VerticalAlignment="Center">
  <Button.Content>
    <TextBlock Text="Lorem ipsum dolor sit amet, consectetur adipisicing elit."
               Width="150"
               TextWrapping="Wrap"
               FontSize="20" />
  </Button.Content>
</Button>

は次のStyleように定義されます。

<Style TargetType="Button">
  <Style.Setters>
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="Button">
          <ControlTemplate.Resources>
            <Storyboard x:Key="ShowShine">
              <DoubleAnimationUsingKeyFrames BeginTime="00:00:00"
                                             Storyboard.TargetName="Shine"
                                             Storyboard.TargetProperty="(UIElement.Opacity)">
                <SplineDoubleKeyFrame KeyTime="0"
                                      Value="1" />
              </DoubleAnimationUsingKeyFrames>
            </Storyboard>
            <Storyboard x:Key="HideShine">
              <DoubleAnimationUsingKeyFrames BeginTime="00:00:00"
                                             Storyboard.TargetName="Shine"
                                             Storyboard.TargetProperty="(UIElement.Opacity)">
                <SplineDoubleKeyFrame KeyTime="0"
                                      Value="0" />
              </DoubleAnimationUsingKeyFrames>
            </Storyboard>
            <Storyboard x:Key="ShowMatte">
              <DoubleAnimationUsingKeyFrames BeginTime="00:00:00"
                                             Storyboard.TargetName="Matte"
                                             Storyboard.TargetProperty="(UIElement.Opacity)">
                <SplineDoubleKeyFrame KeyTime="0"
                                      Value="1" />
              </DoubleAnimationUsingKeyFrames>
            </Storyboard>
            <Storyboard x:Key="HideMatte">
              <DoubleAnimationUsingKeyFrames BeginTime="00:00:00"
                                             Storyboard.TargetName="Matte"
                                             Storyboard.TargetProperty="(UIElement.Opacity)">
                <SplineDoubleKeyFrame KeyTime="0"
                                      Value="0" />
              </DoubleAnimationUsingKeyFrames>
            </Storyboard>
          </ControlTemplate.Resources>
          <Grid>
            <Border Background="#FFEEEEEE"
                    BorderBrush="#00FFFFFF"
                    Padding="10 5"
                    BorderThickness="0"
                    Margin="0 0 0 0">
              <ContentPresenter VerticalAlignment="Center"
                                Grid.RowSpan="2"
                                Margin="{TemplateBinding Padding}"
                                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" />
            </Border>
            <Border Background="#FF51a6ee"
                    BorderBrush="#FF51a6ee"
                    Padding="10 5"
                    Margin="0 0 0 0"
                    Opacity="0"
                    BorderThickness="0"
                    Name="Shine">
              <ContentPresenter VerticalAlignment="Center"
                                Grid.RowSpan="2"
                                Margin="{TemplateBinding Padding}"
                                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" />
            </Border>
            <Border Background="#0b86ef"
                    BorderBrush="#0b86ef"
                    Padding="10 5"
                    Margin="0 0 0 0"
                    Opacity="0"
                    BorderThickness="0"
                    Name="Pressed">
              <ContentPresenter VerticalAlignment="Center"
                                Grid.RowSpan="2"
                                Margin="{TemplateBinding Padding}"
                                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" />
            </Border>
            <Border Background="#FFAAAAAA"
                    BorderBrush="#00FFFFFF"
                    Padding="10 5"
                    BorderThickness="0"
                    Margin="0 0 0 0"
                    Opacity="0"
                    Name="Matte">
              <ContentPresenter VerticalAlignment="Center"
                                Grid.RowSpan="2"
                                Margin="{TemplateBinding Padding}"
                                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" />
            </Border>
          </Grid>
          <ControlTemplate.Triggers>
            <Trigger Property="IsMouseOver"
                     Value="True">
              <Trigger.ExitActions>
                <BeginStoryboard Storyboard="{StaticResource HideShine}" />
              </Trigger.ExitActions>
              <Trigger.EnterActions>
                <BeginStoryboard Storyboard="{StaticResource ShowShine}" />
              </Trigger.EnterActions>
            </Trigger>
            <Trigger Property="IsPressed"
                     Value="True">
              <Setter Property="Opacity"
                      TargetName="Pressed"
                      Value="1" />
            </Trigger>
            <Trigger Property="IsEnabled"
                     Value="False">
              <Trigger.ExitActions>
                <BeginStoryboard Storyboard="{StaticResource HideMatte}" />
              </Trigger.ExitActions>
              <Trigger.EnterActions>
                <BeginStoryboard Storyboard="{StaticResource ShowMatte}" />
              </Trigger.EnterActions>
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style.Setters>
</Style>

TextBlockは明らかに「そこに」ありますが、前景色の選択に関係なく、表示されません。TextBlockボタンに表示する方法はありますか?

編集: ContentPresenters は互いにオーバーライドしていました。次のスタイルは期待どおりに機能しました。

  <Style TargetType="Button">
    <Style.Setters>
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="Button">
            <ControlTemplate.Resources>
              <Storyboard x:Key="ShowShine">
                <DoubleAnimationUsingKeyFrames BeginTime="00:00:00"
                                               Storyboard.TargetName="Shine"
                                               Storyboard.TargetProperty="(UIElement.Opacity)">
                  <SplineDoubleKeyFrame KeyTime="0"
                                        Value="1" />
                </DoubleAnimationUsingKeyFrames>
              </Storyboard>
              <Storyboard x:Key="HideShine">
                <DoubleAnimationUsingKeyFrames BeginTime="00:00:00"
                                               Storyboard.TargetName="Shine"
                                               Storyboard.TargetProperty="(UIElement.Opacity)">
                  <SplineDoubleKeyFrame KeyTime="0"
                                        Value="0" />
                </DoubleAnimationUsingKeyFrames>
              </Storyboard>
              <Storyboard x:Key="ShowMatte">
                <DoubleAnimationUsingKeyFrames BeginTime="00:00:00"
                                               Storyboard.TargetName="Matte"
                                               Storyboard.TargetProperty="(UIElement.Opacity)">
                  <SplineDoubleKeyFrame KeyTime="0"
                                        Value="1" />
                </DoubleAnimationUsingKeyFrames>
              </Storyboard>
              <Storyboard x:Key="HideMatte">
                <DoubleAnimationUsingKeyFrames BeginTime="00:00:00"
                                               Storyboard.TargetName="Matte"
                                               Storyboard.TargetProperty="(UIElement.Opacity)">
                  <SplineDoubleKeyFrame KeyTime="0"
                                        Value="0" />
                </DoubleAnimationUsingKeyFrames>
              </Storyboard>
            </ControlTemplate.Resources>
            <Grid>
              <Border Background="#FFEEEEEE"
                      BorderBrush="#00FFFFFF"
                      Padding="10 5"
                      BorderThickness="0" />
              <Border Background="#FF51a6ee"
                      BorderBrush="#FF51a6ee"
                      Padding="10 5"
                      Opacity="0"
                      BorderThickness="0"
                      Name="Shine" />
              <Border Background="#0b86ef"
                      BorderBrush="#0b86ef"
                      Padding="10 5"
                      Opacity="0"
                      BorderThickness="0"
                      Name="Pressed" />
              <Border Padding="10 5">
                <ContentPresenter VerticalAlignment="Center"
                                  Grid.RowSpan="2"
                                  Margin="{TemplateBinding Padding}"
                                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" />
              </Border>
              <Border Background="#FFAAAAAA"
                      BorderBrush="#00FFFFFF"
                      Padding="10 5"
                      BorderThickness="0"
                      Opacity="0"
                      Name="Matte" />
            </Grid>
            <ControlTemplate.Triggers>
              <Trigger Property="IsMouseOver"
                       Value="True">
                <Trigger.ExitActions>
                  <BeginStoryboard Storyboard="{StaticResource HideShine}" />
                </Trigger.ExitActions>
                <Trigger.EnterActions>
                  <BeginStoryboard Storyboard="{StaticResource ShowShine}" />
                </Trigger.EnterActions>
              </Trigger>
              <Trigger Property="IsPressed"
                       Value="True">
                <Setter Property="Opacity"
                        TargetName="Pressed"
                        Value="1" />
              </Trigger>
              <Trigger Property="IsEnabled"
                       Value="False">
                <Trigger.ExitActions>
                  <BeginStoryboard Storyboard="{StaticResource HideMatte}" />
                </Trigger.ExitActions>
                <Trigger.EnterActions>
                  <BeginStoryboard Storyboard="{StaticResource ShowMatte}" />
                </Trigger.EnterActions>
              </Trigger>
            </ControlTemplate.Triggers>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style.Setters>
  </Style>
4

1 に答える 1

1

まず最初に:

なんでこんな風に使ってるの<Button.Content> </Button.Content>

それは単にによって行われます

<Button>
   <TextBlock Style="{StaticResource MyStyle}"/>
</Button>

次に、スタイル自体にはContentPresenterがほとんど含まれていません。これは、ボタンごとに1つにするかContent={TemplateBinding Content}、コンテンツを表示するために1つだけにすることができるためです。

于 2013-02-08T06:30:51.093 に答える