Estoy tratando de aprender algo sobre WPF y estoy bastante sorprendido por su flexibilidad.WPF Algunos estilos no se aplican en los controles de DataTemplate
Sin embargo, he encontrado un problema con Style
sy DataTemplate
s, que es un poco confuso. he definido a continuación página de prueba para jugar un poco con los estilos etc y encontraron que los Style
s definen en <Page.Resources>
para Border
y TextBlock
no se aplican en el DataTemplate
, pero se aplica Style
para ProgressBar
definido exactamente de la misma manera.
El código fuente (sólo tiene que utilizar Kaxaml y XamlPadX para ver el resultado)
<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>
Sospecho que tiene algo que ver con los estilos por defecto, etc, pero más desconcertante es por qué se aplican algunas Style
s y otros no . No puedo encontrar una explicación fácil para arriba en ningún lado y, por lo tanto, me gustaría preguntar si alguien sería tan amable de explicar este comportamiento en términos lamenses con posibles enlaces a la descripción técnica, es decir, a MSDN más o menos.
Gracias de antemano por su apoyo!
¡Gracias por el enlace! Explica lo que está pasando, pero el enlace a la documentación oficial sería bueno solo que sé dónde buscar tales cosas. – Martin
Se agregó un enlace al informe de errores en el sitio Connect de Microsoft, no estoy seguro de que exista algún documento oficial que describa este comportamiento. – CodeNaked
ambos enlaces están muertos ahora. encontrado [enlace de retroceso para el primero] (https://web.archive.org/web/20170201072114/http://www.11011.net/archives/000692.html). Por favor agrégalo a tu respuesta si quieres. – itsho