如何将模板与样式绑定



我有一个C# WPF应用程序,我需要在其中创建一堆具有不同颜色的图像/文本按钮。 为此,我创建了一个从 Button 类派生的 ImageButton。

我希望我的按钮有圆角,所以我创建了以下控件模板:

    <ControlTemplate x:Key="RoundedButtonTemplate" TargetType="{x:Type MyProject:ImageButton}">
        <Grid>
            <Border x:Name="border" Background="WHAT DO I PUT HERE?" CornerRadius="10"/>
        </Grid>         
    </ControlTemplate>

现在,我希望能够通过更改 XAML 中的样式来轻松更改上方边框的颜色。 我定义了以下样式。

绿色按钮样式:

    <Style x:Key="GreenButtonStyle" TargetType="{x:Type MyProject:ImageButton}">
        <Setter Property="Background" Value="{DynamicResource GreenButtonBrush}"/>
RoundedButtonTemplate}"/>
    </Style>

蓝色按钮样式:

    <Style x:Key="GreenButtonStyle" TargetType="{x:Type MyProject:ImageButton}">
        <Setter Property="Background" Value="{DynamicResource BlueButtonBrush}"/>
RoundedButtonTemplate}"/>
    </Style>

我的客户端代码如下所示:

<local:ImageButton HorizontalAlignment="Left" Margin="24,19.234,0,20" Width="97" Grid.Row="3" Style="{DynamicResource GreenButtonStyle}" Template="{DynamicResource RoundedButtonTemplate}"/>

我的问题是如何让模板知道要使用哪种样式? 我尝试将以下属性添加到我的样式中,但没有取得多大成功:

<Setter Property="Template" Value="{DynamicResource RoundedButtonTemplate}"/>

我猜ImageButton继承自UserControl,因为这是一个复合控件。 如果没有,您可能应该这样做。 MSDN 讨论了从控件与用户控件继承。 我会把边框放在那里,放在一个按钮和一个文本块或其他东西里面。

一种方法是在新的 ImageButton 类上定义一个依赖属性,类似于"BorderBackground"。 您可以链接它以在设置边框时更改边框的背景颜色。 如果您愿意,我可以提供示例代码。

设置样式时,目标属性将为"边框背景"。 这将消除对控件模板进行任何更改的需要,我通常尽量避免这样做。

这有帮助吗?

或者回答您最初的问题,我不确定模板是否知道如何应用样式,因为您的样式针对 ImageButton 控件的背景,而不是边框控件的背景。

我想

我想通了。 所需要的只是在我的模板定义中放置以下文本:

Background="{TemplateBinding Background}"

有关详细信息,请参阅本文:模板绑定:样式和模板之间的桥梁

相关内容

  • 没有找到相关文章

最新更新