2012-01-24 2 views
14

すべての私のウィンドウに置いたすべてのコントロールにデフォルトのマージンを3に設定し、本当に少数の項目でこの値をオーバーライドすることができます。すべてのWPFウィンドウ上のすべてのコントロールのデフォルトマージンを設定するにはどうすればよいですか?

私はスタイルをやっているようなアプローチを見たことがありますが、すべてをスタイルする必要があります。私はすべてのコントロールを一緒に行うよりも何か好きです。私はMarginSetterのような他のものを見てきましたが、サブパネルを横切らないように見えます。私はウィンドウ上に置いたコントロールだけでマージンが必要で、ビジュアルツリーの境界やその他のものとは関係ありません。

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

ありがとうございます。

+0

境界は対照です。スタイルを使用して何が詰まっていますか? Wpfを使用する場合、暗黙のスタイルを見てください - 特定のタイプに適用できるもの(SL5もそれらを持つはずです)。 –

+0

@ドミトリー:間違っているのは、私が使っている誰でも作成したすべてのコントロールのスタイルを作成する必要があるということです。これは、すべてのコントロールに基本クラスがあり、継承がこのようなことを避けるために使用されていることを覚えているという素晴らしい解決策ではありません。 –

+0

暗黙のスタイルを使用していますか?インスタンスレベルではなくタイプで適用されます。 –

答えて

17

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

<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> 

幸運を...

+0

さて、Windowsフォームには既定の余白の値がありますが、すべてには常に余白が必要です。私はそれをすべてのアプリケーションに適用するための汎用的なソリューションを探していました。私は各コントロールのためのスタイルを作成しなければならないように見える...それは私が気のことを永遠に維持する必要があることを念頭に置いて傷つけることができます。 –

+0

ええ、これは間違いなくWPFの欠点です。より良い解決策が見つかると、私はここにそれを掲示するでしょう。 –

15

あなたは」を参照して、あなたの余白のプロパティのすべてをリンクすることができます厚さ "と定義されています。私はちょうど私のための鍵は、マージンは「厚さ」により定義されたことを考え出すされました...プロジェクトに

<!-- 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の例に私が必要とするかどうかを教えてください。

1

ボタンスタイルで余白を適用できます。 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> 

に関してはGeorgi

+0

は、スタイルをスタックパネルに追加し、そのスタイルをすべての子要素に下向きに伝播させることは可能ですか? – BKSpurgeon

関連する問題