在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,事情工作得很好,但绑定不起作用。请让我知道我在上面的方法错在哪里。

在Silverlight 5中绑定样式

你必须使用像

这样的绑定
<TextBlock Text="{Binding Path=DataContext.BusyText, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"

怎么说呢?你要做的是而不是, Silverlight 5的新特性在Styles中绑定。这种绑定总是可行的,即使在较旧的Silverlight版本中也是如此。您有一个DataTemplate,这意味着当从模板实例化实际UI元素时,您声明的任何绑定都将被评估。你的绑定Source="{Binding ImageSource}"是根据按钮的DataContext来计算的。如果没有公共属性ImageSource,那么你的按钮将不会显示任何图像。