是否有可能提供“论证”。自定义控件样式&模板?

时间:2015-05-09 19:03:09

标签: c# wpf xaml

我有2个按钮,两个按钮都使用样式来保持一致的UI。但是对于1个按钮,我想提供一个图像,而另一个只是文本。

我想我可以创建一个新的样式,复制一切,然后根据自己的喜好重新格式化,但这看起来很浪费,很耗时,我想我必须为每个我希望拥有的实例做这件事按钮上的图像。我的意思是,这很好,但我只是想知道是否有一种替代方案可以让事情变得更优雅。

我认为我应该以某种方式推动“争论”。或者样式的数据,无论是在XAML中还是在XAML中以格式化样式,或者是可以实现此目的的东西(我确定术语是错误的)。

这是按钮样式:

<Style x:Key="Control_Button" TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid>
                    <Image> <!-- Optional Image here --> </Image>
                    <TextBlock Name="btn" Text="{TemplateBinding Content}" Padding="16" VerticalAlignment="Center">
                        <TextBlock.TextDecorations>
                            <TextDecoration Location="Underline" />
                        </TextBlock.TextDecorations>
                    </TextBlock>
                    <!-- FIX ME: not underlined normally -->

                </Grid>

                <ControlTemplate.Triggers>
                    <Trigger Property="TextBlock.IsMouseOver" Value="True">
                        <Setter TargetName="btn" Property="TextDecorations" Value="none" />
                        <!-- FIX ME: underlined on hover -->
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

1 个答案:

答案 0 :(得分:0)

如果不创建自定义控件或用户控件,则无法满足您的要求。

你应该做的是按照你喜欢的方式设置按钮的内容。如果您只想要一个字符串,可以直接设置它:

<Button>my text</Button>

或绑定:

<Button Content={Binding textProperty} />

要在按钮中添加图片,请将面板添加为内容,在此示例中我添加了StackPanel,但您也可以使用Grid或任何其他元素:

<Button>
    <Button.Content>
        <StackPanel Orientation="Horizontal">
            <Image Source="{Binding myImagePath}" />
            <TextBlock Text="{Binding myText}" />
        </StackPanel>
    </Button.Content>
</Button>