我有以下XAML(簡化):爲什麼Listbox DataTemplate不使用Windows.Resources樣式?
<Window ...
<Window.Resources>
<Style TargetType="{x:Type TextBlock}" >
<Setter Property="FontSize" Value="28" />
<Setter Property="Margin" Value="3" />
<Setter Property="Foreground" Value="Green" />
</Style>
</Window.Resources>
<StackPanel>
<ListBox ItemsSource=...
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" >
<TextBlock Text="{Binding Index}" />
<TextBlock Text="-" />
<TextBlock Text="{Binding Hours, StringFormat={}{0:00}}" />
<TextBlock Text=":" />
<TextBlock Text="{Binding Minutes, StringFormat={}{0:00}}" />
<TextBlock Text=":" />
<TextBlock Text="{Binding Seconds, StringFormat={}{0:00}}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
...
有了這個代碼在Window.Resources定義的樣式沒有被施加到所述的DataTemplate內部TextBlock的,但它是對窗口其他的TextBlocks。
如果我複製樣式,並將其設置在DataTemplate中資源是這樣的:
<DataTemplate.Resources>
<Style TargetType="{x:Type TextBlock}" >
<Setter Property="FontSize" Value="28" />
<Setter Property="Margin" Value="3" />
<Setter Property="Foreground" Value="Green" />
</Style>
</DataTemplate.Resources>
然後,它的工作原理。任何想法爲什麼我需要重複風格?
在此先感謝。
這是不正確的。隱式樣式只需要重寫'TextBlock'所具有的'DefaultStyleKey'屬性。 –
重寫'DefaultStyleKey'並在'Window'中編寫隱式樣式有些不同。基本上,當風格評估爲非'System.Windows.Controls.Control'元素時,它不會超越該模板來檢查其他元素資源,而是直接轉到Application.Resources然後是DefaultStyleKey。 – dkozl
你是對的,我沒有注意到你寫道,它只在模板內是真實的。對不起:) –