0

3つの状態(通常、クリック、無効)を持つカスタムWPFボタンを作成しました。州ごとに異なるイメージがあります。この一般的なボタンは、プロジェクトのさまざまな場所で使用し、.CSファイルのプロパティを使用してさまざまな画像を読み込むたびに使用します。

<Button.Resources>
    <ImageSource x:Key="Normal">..\Resources\DefaultNormal.png</ImageSource>
    <ImageSource x:Key="Disabled">..\Resources\DefaultDisabled.png</ImageSource>
    <ImageSource x:Key="Pressed">..\Resources\DefaultPressed.png</ImageSource>
</Button.Resources>
<Button.Template>
    <ControlTemplate TargetType="{x:Type Button}">
        <Grid>
            <Image Name="normal" Source="{DynamicResource Normal}" Stretch="Fill"/>
            <Image Name="pressed" Source="{DynamicResource Pressed}" Stretch="Fill" Visibility="Hidden"/>
            <Image Name="disabled" Source="{DynamicResource Disabled}" Stretch="Fill" Visibility="Hidden"/>
        </Grid>
        <ControlTemplate.Triggers>
            <Trigger Property="IsPressed" Value="True">
                <Setter TargetName="normal" Property="Visibility" Value="Hidden"/>
                <Setter TargetName="pressed" Property="Visibility" Value="Visible"/>
            </Trigger>
            <Trigger Property="IsEnabled" Value="False">
                <Setter TargetName="normal" Property="Visibility" Value="Hidden"/>
                <Setter TargetName="disabled" Property="Visibility" Value="Visible"/>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>
</Button.Template>

ボタンのテキスト/コンテンツについても同じことをしたいのですがImageSource、テキストに似たものが見つかりません。そのようなものはありますか?それとも、テキストを動的に変更する別の方法がありますか?

4

2 に答える 2

2

コントロールテンプレートに新しい要素を追加する必要があるようです。次に、トリガーでアクセスできます。

<ControlTemplate TargetType="{x:Type Button}">
    <Grid>
        <Image Name="normal" Source="{DynamicResource Normal}" Stretch="Fill"/>
        <Image Name="pressed" Source="{DynamicResource Pressed}" Stretch="Fill" Visibility="Hidden"/>
        <Image Name="disabled" Source="{DynamicResource Disabled}" Stretch="Fill" Visibility="Hidden"/>
        <TextBlock Name="text" Text="{TemplateBinding Content}" VerticalAlignment="Center" HorizontalAlignment="Center" />
    </Grid>
    <ControlTemplate.Triggers>
        <Trigger Property="IsPressed" Value="True">
            <Setter TargetName="normal" Property="Visibility" Value="Hidden"/>
            <Setter TargetName="pressed" Property="Visibility" Value="Visible"/>
            <Setter TargetName="text" Property="Text" Value="Pressed :)"/>
        </Trigger>
        <Trigger Property="IsEnabled" Value="False">
            <Setter TargetName="normal" Property="Visibility" Value="Hidden"/>
            <Setter TargetName="disabled" Property="Visibility" Value="Visible"/>
            <Setter TargetName="text" Property="Text" Value="Disabled :("/>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

ここでは、画像の上にオーバーを追加し、TextBlockプレス/無効状態のテキストを変更しました。


コントロール内のリソースとしてテキスト文字列を追加する場合は、System名前空間を使用してStringタイプを参照します。 xmlns:clr="clr-namespace:System;assembly=mscorlib

<Button.Resources>
    <clr:String x:Key="NormalText">Normal</clr:String>
    <clr:String x:Key="DisabledText">Disabled</clr:String>
    <clr:String x:Key="PressedText">Pressed</clr:String>
</Button.Resources>
于 2012-10-03T16:05:05.760 に答える
0

これを試して:

1)名前空間に追加:

xmlns:system="clr-namespace:System;assembly=mscorlib"

2)このエントリをリソースに追加します。

<system:String x:Key="myMessage">Button state: clicked!</system:String>

TextBlockこれで、 Textプロパティ「myMessage」で、またはButtonコンテンツとして使用できます。

<Button Content="{StaticResource myMessage}" />
于 2012-10-03T16:07:47.937 に答える