Tôi đang cố gắng tìm hiểu điều gì đó về WPF và tôi khá ngạc nhiên bởi tính linh hoạt của nó.WPF Một số kiểu không được áp dụng trên các điều khiển DataTemplate
Tuy nhiên, tôi đã gặp sự cố với Style
s và DataTemplate
s, điều này hơi khó hiểu. tôi đã xác định bên dưới trang thử nghiệm để chơi xung quanh một chút với phong cách vv và phát hiện ra rằng Style
s quy định tại <Page.Resources>
cho Border
và TextBlock
không được áp dụng trong DataTemplate
, nhưng Style
cho ProgressBar
quy định tại chính xác theo cùng một cách được áp dụng.
Source code (tôi chỉ sử dụng Kaxaml và XamlPadX để xem kết quả)
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<Style TargetType="{x:Type Border}">
<Setter Property="Background" Value="SkyBlue"/>
<Setter Property="BorderBrush" Value="Black"/>
<Setter Property="BorderThickness" Value="2"/>
<Setter Property="CornerRadius" Value="5"/>
</Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="FontWeight" Value="Bold"/>
</Style>
<Style TargetType="{x:Type ProgressBar}">
<Setter Property="Height" Value="10"/>
<Setter Property="Width" Value="100"/>
<Setter Property="Foreground" Value="Red"/>
</Style>
<XmlDataProvider x:Key="TestData" XPath="/TestData">
<x:XData>
<TestData xmlns="">
<TestElement>
<Name>Item 1</Name>
<Value>25</Value>
</TestElement>
<TestElement>
<Name>Item 2</Name>
<Value>50</Value>
</TestElement>
</TestData>
</x:XData>
</XmlDataProvider>
<HierarchicalDataTemplate DataType="TestElement">
<Border Height="45" Width="120" Margin="5,5">
<StackPanel Orientation="Vertical" Margin="5,5" VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock HorizontalAlignment="Center" Text="{Binding XPath=Name}"/>
<ProgressBar Value="{Binding XPath=Value}"/>
</StackPanel>
</Border>
</HierarchicalDataTemplate>
</Page.Resources>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<StackPanel Orientation="Vertical" VerticalAlignment="Center">
<Border Height="45" Width="120" Margin="5,5">
<StackPanel Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock HorizontalAlignment="Center" Text="Item 1"/>
<ProgressBar Value="25"/>
</StackPanel>
</Border>
<Border Height="45" Width="120" Margin="5,5">
<StackPanel Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock HorizontalAlignment="Center" Text="Item 2"/>
<ProgressBar Value="50"/>
</StackPanel>
</Border>
</StackPanel>
<ListBox Margin="10,10" Width="140" ItemsSource="{Binding Source={StaticResource TestData}, XPath=TestElement}"/>
</StackPanel>
</Page>
tôi nghi ngờ nó có cái gì để làm với kiểu mặc định vv, nhưng nhiều hơn khó hiểu là tại sao một số Style
s được áp dụng và một số không . Tôi không thể tìm thấy một lời giải thích dễ dàng ở trên bất cứ đâu và do đó muốn hỏi xem có ai đó sẽ tử tế để giải thích hành vi này theo các thuật ngữ của lamens với các liên kết có thể có tới mô tả kỹ thuật, ví dụ như MSDN hay không.
Cảm ơn bạn đã hỗ trợ!
Cảm ơn bạn đã liên kết! Nó giải thích những gì đang xảy ra, nhưng vẫn liên kết đến tài liệu chính thức sẽ được tốt đẹp chỉ là tôi biết nơi để tìm những thứ như vậy. – Martin
Đã thêm liên kết vào báo cáo lỗi trên trang Kết nối của Microsoft, không chắc chắn có bất kỳ tài liệu chính thức nào mô tả hành vi này. – CodeNaked
cả hai liên kết đều đã chết. tìm thấy [liên kết đường dẫn đầu tiên] (https://web.archive.org/web/20170201072114/http://www.11011.net/archives/000692.html). Vui lòng thêm nó vào câu trả lời của bạn nếu bạn muốn. – itsho