2

アプリケーションにリソース ディクショナリを作成しています。ここには、「アイコン + テキスト」ボタンがいくつかあります。それらはすべて同じように見えるため (アイコンとテキストを除く)、他のスタイルのベースとして機能する一般的なスタイルを作成しました。

<!-- Generic ActionButtonStyle -->
<Style x:Key="ActionButtonStyle" TargetType="{x:Type Button}">
    <!-- some setter properties -->
    <Setter Property="ContentTemplate" Value="{DynamicResource ButtonDataTemplate}"/>
</Style>
<DataTemplate x:Key="ButtonDataTemplate">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="24" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Image  Source="{Binding Source}"
                Stretch="Uniform" 
                Grid.Column="0"
                Margin="2"/>
        <TextBlock  Text="{Binding text}"
                    TextWrapping="Wrap"
                    Grid.Column="1"
                    Margin="2"
                    VerticalAlignment="Center"/>
    </Grid>
</DataTemplate> 

そして、アイコン用の画像がいくつかあります:

<!-- Icons -->
  <ImageSource x:Key="textToSpeech">Images/GreyIcons/TextToSpeech.png</ImageSource>
  <ImageSource x:Key="play">Images/GreyIcons/Play.png</ImageSource>
  <ImageSource x:Key="playSound">Images/GreyIcons/PaySound.png</ImageSource>
    .
    .
    .
    .
  <ImageSource x:Key="group">Images/GreyIcons/Goup1.png</ImageSource>

そして、各ボタン(各アイコンに対応)に個別のスタイルを作成したいと思います。このようなもの:

<!-- Specific ActionButtonStyles -->
<Style x:Key="TextToSpeechButtonStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource ActionButtonStyle}">
    <Setter Property="Content">
        <Setter.Value>
            <Image Source="{StaticResource textToSpeech}"
        </Setter.Value>
    </Setter>
</Style>

私はこれがうまくいかないことを知っています..どうすればいいですか? 汎用ボタン用のカスタム ユーザー コントロールを作成する必要がありますか? テキストはモデル内のオブジェクトにバインドされ、コマンドも (アクションに) バインドされます。

4

2 に答える 2

1

2 つの新しい DependancyProperties を追加する Button から派生クラスを作成する必要があります。これらは、Text や ImageSource などと呼ばれます。あなたの派生クラスは、あなたが示したように ContentTemplate も設定します。この ContentTemplate は、Text および ImageSource の依存関係プロパティに対してバインドされます。

次に、次のように XAML でカスタム コントロールを作成できます...

<app:CustomButton Text="Play" Source="{Binding play}"/>

...しかし、同じボタンが何度も必要な場合は、CustomButton に適用されるスタイルを作成し、必要に応じてこれら 2 つのプロパティを設定できます。

于 2012-04-12T02:19:02.160 に答える
1

あなたが探しているものの例が欠けているようですが、「BasedOn」を探しているようです - これにより、継承できますが、以前に定義されたスタイルをオーバーライドできます。次のように実装できます。

<Style x:Key="MyButtonStyle" BasedOn="{StaticResource ActionButtonStyle}">
  <Setter.../>
</Style>
于 2012-04-12T01:51:46.010 に答える