Stackpanel的风格

时间:2011-09-14 10:41:59

标签: wpf xaml styles stackpanel

使用windows.resource中的下一个代码块。

<Style TargetType="Button" x:Key="l1" >
    <Setter Property="Button.Effect" >
    <!--<Setter Property="BitmapEffect">-->
        <Setter.Value>
            <DropShadowEffect />
        </Setter.Value>
    </Setter>
    <Setter Property="Content" >
        <Setter.Value >
            <StackPanel  Orientation="Horizontal">
                <Image Source="Resources\find.bmp" Stretch="Uniform" ></Image>
                <TextBlock>Find</TextBlock>
            </StackPanel>
        </Setter.Value>
    </Setter>
</Style>

它仅适用于一个按钮,但只要我在运行时生成第二个按钮错误。

<Button Height="23" HorizontalAlignment="Left" Margin="322,25,0,0" Name="Button18" VerticalAlignment="Top" Width="75" Style="{StaticResource l1}" />
<Button Height="23" HorizontalAlignment="Left" Margin="586,37,0,0" Name="Button19" VerticalAlignment="Top" Width="75" Style="{StaticResource l1}" />

解决此问题的任何解决方案?

2 个答案:

答案 0 :(得分:0)

您不能直接以这种方式设置Content的{​​{1}}。这样做的原因是ContentControl setter中的StackPanel(仅命名一个)与样式适用的所有按钮的实例相同;但是,这是不允许的(并且可能导致您获得元素已经是另一个元素的子元素异常)。

相反,您应该设置Content属性:

ContentTemplate

这将有效,因为现在将为模板的每个实例化创建一个新的可视化树分支(即,您将拥有与按钮一样多的<Setter Property="ContentTemplate"> <Setter.Value> <DataTemplate> <StackPanel Orientation="Horizontal"> <Image Source="Resources\find.bmp" Stretch="Uniform" ></Image> <TextBlock>Find</TextBlock> </StackPanel> </DataTemplate> </Setter.Value> </Setter> 等。)

答案 1 :(得分:0)

您无法通过类似的样式设置控件的内容(至少不会两次)。

您应该使用模板发送内容,如下所示:

    <DataTemplate x:Key="buttonTemplate">
        <StackPanel  Orientation="Horizontal">
            <Image Source="Resources\find.bmp" Stretch="Uniform" ></Image>
            <TextBlock>Find</TextBlock>
        </StackPanel>
    </DataTemplate>
    <Style TargetType="Button" x:Key="l1" >
        <Setter Property="Button.Effect" >
            <Setter.Value>
                <DropShadowEffect />
            </Setter.Value>
        </Setter>
        <Setter Property="ContentTemplate" Value="{StaticResource buttonTemplate}" />
    </Style>