0

私は、デフォルトの WPF コントロールのスタイルを設定しただけのユーザー コントロール ライブラリを作成しようとしています。基本的に、私はすべてのプロジェクトで同じスタイルのコントロールを使用しています。

そこで、各プロジェクトのすべてを再スタイルするのではなく、すべてのコントロールを事前にスタイル設定したユーザー コントロール ライブラリを作成できると考えました。ただし、空白のボックスが残るため、コントロールにスタイルを適用できないようです。

ボタン コントロールの XAML を次に示します。完全に間違ったことをしているに違いないことはわかっていますが、これを行う方法についてネット上で情報を見つけることができないようです。

基本的には、これを標準のwpfボタンにしたいだけですが、フォントには「Century Gothic」、クリックすると緑色の背景などが必要です.

誰かが私を正しい方向に向けることができますか?

<Button x:Class="IM.WPF.Controls.imButton"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        mc:Ignorable="d"
        d:DesignHeight="23"
        d:DesignWidth="75">

  <Button.Style>
    <Style TargetType="Button"
           x:Name="imButtonStyle">
      <Setter Property="SnapsToDevicePixels"
              Value="True" />
      <Setter Property="OverridesDefaultStyle"
              Value="True" />
      <Setter Property="Content"
              Value="imButton" />
      <Setter Property="BorderBrush"
              Value="#006150" />
      <Setter Property="FontFamily"
              Value="Century Gothic" />
      <Setter Property="FontSize"
              Value="12" />
      <Setter Property="Foreground"
              Value="#006150" />
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="Button">
            <ControlTemplate.Triggers>
              <Trigger Property="IsPressed"
                       Value="True">
                <Setter Property="Background">
                  <Setter.Value>
                    <LinearGradientBrush>
                      <GradientStop Color="#006150"
                                    Offset="0" />
                      <GradientStop Color="#006150"
                                    Offset="0.5" />
                      <GradientStop Color="#006150"
                                    Offset="0.5" />
                      <GradientStop Color="#006150"
                                    Offset="0.9" />
                    </LinearGradientBrush>
                  </Setter.Value>
                </Setter>
              </Trigger>
            </ControlTemplate.Triggers>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </Button.Style>

  <Button.Background>
    <LinearGradientBrush StartPoint="0,0"
                         EndPoint="0,1">
      <GradientStop Color="White"
                    Offset="0" />
      <GradientStop Color="#E0E0E0"
                    Offset="0.5" />
      <GradientStop Color="LightGray"
                    Offset="0.5" />
      <GradientStop Color="DarkGray"
                    Offset="0.9" />
    </LinearGradientBrush>
  </Button.Background>

</Button>

ありがとう

4

1 に答える 1

1

コントロールの を空のテンプレートに設定していTemplateます (テンプレートにはトリガーのみが含まれています)。これは、既存の表示ロジックを上書きしています。代わりに、Style Triger でトリガーを設定してみてください。

また、コントロールの外観を変更するだけの場合、すべてのコントロールをサブクラス化するよりも優れた (そして簡単な) アプローチは、既存のコントロールに一連の Xaml スタイルを提供することです。このようにResourceDictionaryして、既存のアプリケーションに適用できる再利用可能なものを用意し、Xaml で非標準のコントロールを大量に使用する必要がなくなります。これを個別の Xaml ファイルとしてパッケージ化することも、再利用可能な別のアセンブリに配置することもできます。

于 2012-11-30T09:54:02.193 に答える