在Silverlight 5中绑定样式
本文关键字:绑定 样式 Silverlight | 更新日期: 2023-09-27 18:03:10
我知道Silverlight 5在样式中引入了数据绑定。我想绑定图像的来源,这是存在于一个按钮的样式的内容模板。我正在使用下面的代码,我试图在样式中设置图像源属性。
//风格
<UserControl x:Class="MGPIControls_Simple.ButtonControl"
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"
xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"
Height="40" Width="40"
mc:Ignorable="d" x:Name="ButtonControlSample">
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.Resources>
<Style x:Key="ImageButtonStyle" TargetType="Button">
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<!-- binding in style -->
<Image Source="{Binding ImageSource}"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
Stretch="Fill"/>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</Grid.Resources>
<Button x:Name="ButtonBase" Style="{StaticResource ImageButtonStyle}"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
</Grid>
其中ImageSource是我创建的依赖属性。如果我不绑定imagesource属性,并保持它静态到一些imageurl,事情工作得很好,但绑定不起作用。请让我知道我在上面的方法错在哪里。
你必须使用像
这样的绑定<TextBlock Text="{Binding Path=DataContext.BusyText, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"
怎么说呢?你要做的是而不是, Silverlight 5的新特性在Styles中绑定。这种绑定总是可行的,即使在较旧的Silverlight版本中也是如此。您有一个DataTemplate
,这意味着当从模板实例化实际UI元素时,您声明的任何绑定都将被评估。你的绑定Source="{Binding ImageSource}"
是根据按钮的DataContext
来计算的。如果没有公共属性ImageSource,那么你的按钮将不会显示任何图像。