2
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:local="clr-namespace:CuratioCMS.Client.UI.Controls">
<Style BasedOn="{StaticResource {x:Type Button}}" TargetType="{x:Type local:ImageButton}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:ImageButton}">
                <StackPanel Height="Auto" Orientation="Horizontal">
                    <Image Width="20"
                           Height="20"
                           Margin="10,4,0,4"
                           Source="{Binding Path=Image,
                                            RelativeSource={RelativeSource TemplatedParent}}"
                           Stretch="Fill" />
                    <TextBlock Margin="5,0,10,0"
                               HorizontalAlignment="Left"
                               VerticalAlignment="Center"
                               FontSize="12"
                               FontWeight="Bold"
                               Foreground="{TemplateBinding Foreground}"
                               Text="{TemplateBinding Label}" />
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

これは、ImageButton カスタム コントロールの Generic.xaml 内のコードです。期待どおりに動作しますが、古いベース ボタンから継承することはできないため、ボタンからすべてのベース スタイルを継承する代わりに、このスタイルはベース スタイルのないカスタム コントロールのみを作成します。

BasedOn="{StaticResource {x:Type Button}}"

VS 内の行に、リソース '{x:Type System.Windows.Controls.Button}' が見つからないというエラーが表示されます

目的のスタイリングを実現する方法と、Visual Studio エディター内にこのエラー メッセージが表示される理由がわかりません

4

1 に答える 1

0

汎用ボタン スタイル (Generic.xaml 内) に基づいてスタイルを定義し、スタイルのテンプレートを再定義しています。このようにして、基本スタイルが上書きされます。

スタイルを少し変更したい場合は、次の 2 つのオプションがあります。

オプション1:

  1. 汎用ボタン スタイルのキーを提供します (Generic.xaml 内で定義されているスタイルを検索し、そのプロパティTargetType="{x:Type Button}"に追加します)。x:Key="someName"
  2. 他のすべてのボタン (ImageButtons を除く) のスタイルを{StaticResource someName}
  3. ImageButton スタイルの BasedOn プロパティを{StaticResource someName}

オプション 2:

  1. 一般的なボタン スタイルのコピーを作成できます
  2. TargetType を ImageButton に設定し、キーを「設定しない」ことで汎用のままにします
  3. 必要な部分を変更します。

オプション 2 は、多くの変更を必要としないため、一般的にはより良い解決策ですが、私は以前にあなたがやりたいと思っていたことを経験しましたが、スタイル コードの重複を避ける方法が見つかりませんでした。

于 2012-10-15T14:52:35.243 に答える