2011-09-20 59 views
0

進出口新的WPF我想用一種風格和className.property廣東話設置樣式使用className.property

風格並不適用於第一個文本框

事實上的母校它適用於堆疊面板

我錯過了什麼嗎?

<Window x:Class="WpfApplication2.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="883"> 
<Grid> 
    <Grid.Resources > 
     <Style x:Key="m"> 
      <Setter Property="TextBox.Background" Value="Aqua"/> 
     </Style> 
    </Grid.Resources> 
    <TextBlock >adsdfsadfasdfad</TextBlock> 
    <StackPanel Orientation="Horizontal" Style="{StaticResource m}"> 
     <TextBox HorizontalAlignment="Stretch" Width="193" Margin="50"> 
     </TextBox> 
     <TextBox HorizontalAlignment="Stretch" Width="193" Background="Black" Margin="50"> 
     </TextBox> 
    </StackPanel> 
</Grid> 

看看this文章 找到屬性= 「ClassName.Property」 在 謝謝。

+0

ClassName.Propert與您在樣式中設置的屬性相關,而不是與樣式目標控件相關 –

回答

1

所以在這裏指定它是另外一個例子,以更好地瞭解如何二傳手工作:

<Window.Resources> 
    <Style x:Key="m"> 
     <Setter Property="TextBox.Height" 
       Value="100" /> 
    </Style> 
</Window.Resources> 
<Grid> 
    <StackPanel Style="{StaticResource m}"> 
     <TextBlock>My Sample</TextBlock> 
     <TextBox>My text box</TextBox> 
    </StackPanel> 
</Grid> 

這裏,TextBox.Height是不是指TextBox的高度,而只是指向一個依賴資源ca lled高度。此行爲是由於樣式沒有TargetType這一事實。 因此,在此示例中,文本框的高度將保留爲默認值,並且只有堆疊面板的高度將更改爲100.

類似的情況在FontFamily的示例中也會發生。實際上發生的是setter將StackPanel FontFamiliy屬性設置爲setter中的值。要牢記的另一件重要事情是,某些屬性在父控件和子控件之間繼承。 但是你需要小心,因爲沒有屬性被繼承。例如,FontFamily可以,但Foreground不會被TextBox控件繼承。

我認爲,你可以使用類似

Property = "ClassName.Property" 

唯一的辦法是當要套用樣式控件的視覺樹包含類型類名的元素。

例如

<Window.Resources> 
    <Style x:Key="m"> 
     <Setter Property="TextBlock.FontFamily" 
       Value="Aharoni" /> 
    </Style> 
</Window.Resources> 
<Grid> 
    <StackPanel Style="{StaticResource m}"> 
     <TextBlock>My Sample</TextBlock> 
    </StackPanel> 
</Grid> 

這裏的StackPanel包含在它的視覺樹一個TextBlock,因此將是現在的setter適用於它。此外,如果您在樣式中定義了TargetType,它將知道在哪個控件上應用模板。

Here是一個鏈接,它描述了一個什麼是控件的可視化樹。

+0

:是的它的工作原理,但我不明白爲什麼你會解釋更多plz?thanx。 – Mohsen

+0

我編輯了上面的答案,它包含有關該問題的更多詳細信息@Mohsen – louie

+0

:謝謝louie – Mohsen

2

如果你想設置的風格在堆棧面板中的所有文本框,然後試試這個

<Grid> 
    <Grid.Resources > 
     <Style x:Key="m" TargetType="{x:Type TextBox}"> 
     <Setter Property="Background" Value="Blue" /> 
     </Style> 
    </Grid.Resources> 
<TextBlock >adsdfsadfasdfad</TextBlock> 
     <StackPanel Orientation="Horizontal" > 
      <StackPanel.Resources> 
       <Style BasedOn="{StaticResource m}" TargetType="{x:Type TextBox}" /> 
      </StackPanel.Resources> 
      <TextBox HorizontalAlignment="Stretch" Name="ss" Width="193" Margin="50"/> 
     <TextBox Width="193" Margin="50"/> 
    </StackPanel> 
</Grid> 

您可以通過使用TargetType="{x:Type TextBox}

+0

應該如何在樣式中使用classname.property屬性設置? – Mohsen

+0

您可以使用'TargetType'來指定它 '