1

良い一日、

WPF アプリケーションで CheckBox コントロールのスタイルを設定中です。私の目標は、CheckBox の「デフォルト」の長方形/境界線の左側にパディングを追加することです。

デフォルトでは、パディングは CheckBox のコンテンツ領域にのみ適用されます。Margin は左側でも機能しますが、この場合、CheckBox はボックスをチェックするためのクリックを登録しません。

誰でもアイデアを得ましたか?前もって感謝します!!

編集 #1、Vlad への回答として、パディング/マージンの違いを示す例:

<StackPanel Orientation="Vertical">
   <Border Width="400" Height="50" BorderBrush="Black" BorderThickness="1">
      <CheckBox Content="Normal, clickable everywhere" />
   </Border>
   <Border Width="400" Height="50" BorderBrush="Black" BorderThickness="1">
      <CheckBox Content="Content padding, clickable everywhere" Padding="5" />
   </Border>
   <Border Width="400" Height="50" BorderBrush="Black" BorderThickness="1">
      <CheckBox Content="Control margin, not clickable in area 5px around" Margin="5" />
   </Border>
</StackPanel>
4

2 に答える 2

3

まあ、このように振る舞うことが期待されています。マージンはコントロールの「外側」にあると見なされるため、マージン領域はクリックをコントロールに通過させません。反対に、パディング エリアはコントロールの一部 (コントロール自体と、コンテンツがレンダリングされる「クライアント エリア」との間) と見なされるため、パディング エリアはクリックを取得します。

だけで行けるようですPadding="5,0,0,0"。(これにより、左側にのみパディングが追加されます。) WPF のボックス モデルについては、この図を参照してください。


更新: コメントに基づいて、デフォルトのテンプレートをハックする必要があります。デフォルトのテンプレートはhttp://msdn.microsoft.com/en-us/library/ms752319%28v=vs.100%29.aspxにあります。

次の変更が必要です: を に含め、必要な余白を に設定しBulletDecoratorます。うまくいけば、焦点が全体ではなく全体に適用されるため、これは役立つはずです。または、別の方法として、 のマージンを設定することもできます。GridBulletDecoratorGridBulletDecoratorBulletDecorator.BulletBorder


更新: もちろん、テンプレート定義全体を実際のコードにコピーしない方が保守性に優れています。以下の裏技で回避できます。

Bulletに追加のマージンを設定することにしたとしますBorder. _ Border _ CheckboxBullet次のトリックでこれを行う必要があります。

<!-- first, define a style for border -->
<Style TargetType="Border" x:Key="MyCoolBorderWithMargin">
    <Setter Property="Margin" Value="5,0,0,0"/>
</Style>

<!-- then, define a style for BulletDecorator -->
<!-- this style overrides the style for inner borders -->
<Style TargetType="BulletDecorator" x:Key="MyCoolDecoratorStyle">
    <Style.Resources>
        <Style TargetType="Border"
               BasedOn="{StaticResource MyCoolBorderWithMargin}"/>
    </Style.Resources>
</Style>

<!-- finally, override the style for CheckBox -->
<Style TargetType="CheckBox">
    <Style.Resources>
        <Style TargetType="BulletDecorator"
               BasedOn="{StaticResource MyCoolDecoratorStyle}"/>
    </Style.Resources>
</Style>

これは役立つはずです。

このコードはCheckBox、現在の WPF バージョンでの既定のコントロール テンプレートの実装方法に関する知識を使用したハックであることに注意してください。(4.0 以外のバージョンの WPF を使用している場合は、バージョン固有であるため、コードを更新する必要がある場合があります。WPF のバージョンが異なれば、異なるコントロール テンプレートが使用されます!)

于 2012-07-04T11:05:00.160 に答える
0

を探しているように聞こえますが、ではMarginありませんPaddingドキュメントは見つかりましたか?かなり丁寧な説明だと思います。

左側のみに空白を追加したチェックボックス:

<CheckBox Margin="50 0 0 0"/>
于 2012-07-04T09:36:35.460 に答える