web-dev-qa-db-ja.com

すべてのWPFウィンドウのすべてのコントロールにデフォルトのマージンを設定するにはどうすればよいですか?

すべてのウィンドウに配置したすべてのコントロールにデフォルトのマージン3を設定し、実際に少数のアイテムでこの値をオーバーライドできるようにします。

私はスタイルを行うようないくつかのアプローチを見てきましたが、それから私はすべてをスタイルする必要があります、私はすべてのコントロールに対して一緒にできるよりも何かを好むでしょう。 MarginSetterのような他のものを見たことがありますが、サブパネルを通過しないようです。余白は、ウィンドウに配置したコントロールにのみ表示し、境界線やその他のビジュアルツリーとは関係ありません。

私にはかなり基本的なものに見えます。何か案は?

前もって感謝します。

20

私が見つけることができる唯一の解決策は、ウィンドウで使用している各コントロールにスタイルを適用することです(それはあなたが望むものではないことを私は知っています)。いくつかの異なるコントロールタイプのみを使用している場合、次のようなことを行うのはそれほど面倒ではありません。

<Window x:Class="WpfApplication7.MainWindow"
        xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <!-- One style for each *type* of control on the window -->
        <Style TargetType="TextBox">
            <Setter Property="Margin" Value="10"/>
        </Style>
        <Style TargetType="TextBlock">
            <Setter Property="Margin" Value="10"/>
        </Style>
    </Window.Resources>
    <StackPanel>
        <TextBox Text="TextBox"/>
        <TextBlock Text="TextBlock"/>
    </StackPanel>
</Window>

幸運を...

21
Cameron Peters

リソースで定義されている「厚さ」を参照することで、すべてのマージンプロパティをリンクできます。私はプロジェクトでこれをしました...

<!-- somwhere in a resource-->
<Thickness  x:Key="CommonMargin" Left="0" Right="14" Top="6" Bottom="0" />

<!-- Inside of a Style -->
<Style TargetType="{x:Type Control}" x:Key="MyStyle">
     <Setter Property="Margin" Value="{StaticResource CommonMargin}" />
</Style>
<!-- Then call the style in a control -->
<Button Style="{StaticResource MyStyle}" />

<!-- Or directly on a Control -->
<Button Margin="{StaticResource CommonMargin}" />

私にとっての鍵は、マージンが「厚さ」によって定義されていることを理解することでした。それが十分に明確であるかどうか、または完全に機能するXAMLの例に入れる必要があるかどうかを教えてください。

16
Rob

ボタンスタイルでマージンを適用できます。また、StackPanelでこのスタイルのボタンを使用すると、wpfは必要な間隔を適用します。たとえば、resourcedictionaryなどで定義します。

 <Style x:Key="myButtonStyle"  TargetType="{x:Type Button}">
<Setter Property="Margin" Value="10"/>
....
</Style>

次に、StackPanel xaml定義で:

<StackPanel>
   <Border BorderThickness="0"/>
   <Button x:Name="VertBut1" Style="{StaticResource myButtonStyle}"      Content="Button1"/>
   <Button x:Name="VertBut2" Style="{StaticResource myButtonStyle}"      Content="Button2"/>
   <Button x:Name="VertBut3" Style="{StaticResource myButtonStyle}"      Content="Button3"/>
</StackPanel>

ゲオルギよろしく

1