По крайней мере, одна из причин, по которой это не работает, заключается в том, что вы никогда не создаете экземпляр UserControl
. Вы фактически создаете экземпляр Silverlight.Test._01.MainPage
.
Кроме того, в отличие от Button
UserControl
не устанавливает для свойства DefaultStyleKey
элемента управления значение UserControl
, фактически попытка установить значение в DefaultStyleKey
в коде позади приведет к исключению. *
Нет общего обходного пути для этого. Самое близкое, что вы можете получить, это изменить стиль по умолчанию на стандартный ключевой ресурс: -
<Style x:Key="UserControlDefaultStyle" TargetType="UserControl">
<Setter Property="FlowDirection" Value="RightToLeft" />
<Setter Property="FontFamily" Value="Tahoma" />
<Setter Property="Background" Value="Aqua" />
</Style>
Теперь измените свой usercontrol xaml, чтобы он выглядел следующим образом: -
<UserControl x:Class="Silverlight.Test._01.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
Style="{StaticResource UserControlDefaultStyle}"
>
<Grid x:Name="LayoutRoot" Background="{Binding Parent.Background, ElementName=LayoutRoot}">
<Button Content="This is a test" Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="button1" VerticalAlignment="Top" Width="220" />
<sdk:Label Height="28" HorizontalAlignment="Left" Margin="12,6,0,0" Name="label1" VerticalAlignment="Top" Width="351" Content="Test label" />
</Grid>
</UserControl>
Обратите внимание, что это не общее решение, поскольку вам необходимо добавить дополнительный атрибут Style
к каждому UserControl
, который вы создаете.
Также обратите внимание на привязку свойства LayoutRoot Background
. Свойство UserControl.Background
фактически ничего не делает, вы передаете это значение дочернему элементу управления, чтобы оно имело какой-либо эффект.