【问题标题】:Multicontent on a wpf button ( Image + Text)wpf按钮上的多内容(图像+文本)
【发布时间】:2013-02-28 21:42:07
【问题描述】:

我想为按钮创建一个模板。我想在这个按钮上放置一张图片(在左边)和文字。

我试着做一个这样的东西:

<ControlTemplate TargetType="{x:Type Button}" x:Key="BoutonImageEtTexte">
<Button Grid.Column="2" BorderBrush="Transparent" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center" Width="90" Height="27" >
    <Button.Content>
            <Label>
                <Label.Content>Fichiers joints</Label.Content>
                <Label.Foreground>white</Label.Foreground>
                <Label.VerticalAlignment>center</Label.VerticalAlignment>
                <Label.HorizontalAlignment>center</Label.HorizontalAlignment>
            </Label>
            <Border CornerRadius="3">
            <ContentPresenter/>
            <Border.Style>
                <Style TargetType="{x:Type Border}">
                    <Setter Property="Background" Value="#58585a" />
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Background" Value="{StaticResource DegradeCouleurTheme}" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Border.Style>
        </Border>
    </Button.Content>      
    <Button.Style>
        <Style TargetType="{x:Type Button}" >
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}" >
                        <ContentPresenter />
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Button.Style>

</Button>
</ControlTemplate>

这是我添加了堆栈面板的代码:

 <ControlTemplate TargetType="{x:Type Button}" x:Key="BoutonImageEtTexte">
<Button Grid.Column="2" BorderBrush="Transparent" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center" Width="90" Height="27" >
    <Button.Content>
        <StackPanel Orientation="Horizontal">
            <Border CornerRadius="3">
                <ContentPresenter/>
                <Border.Style>
                    <Style TargetType="{x:Type Border}">
                        <Setter Property="Background" Value="#58585a" />
                        <Style.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="Background" Value="{StaticResource DegradeCouleurTheme}" />
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </Border.Style>
            </Border>
            <Label>
                <Label.Content>Fichiers joints</Label.Content>
                <Label.Foreground>white</Label.Foreground>
                <Label.VerticalAlignment>center</Label.VerticalAlignment>
                <Label.HorizontalAlignment>center</Label.HorizontalAlignment>
            </Label>
        </StackPanel>
    </Button.Content>
    <Button.Style>
        <Style TargetType="{x:Type Button}" >
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}" >
                        <ContentPresenter />
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Button.Style>
</Button>

这是我对模板的调用:

            <Grid Margin ="10,180,10,14">
                <Button Template="{StaticResource BoutonImageEtTexte}" HorizontalAlignment="Left" Margin="13,0,0,0"> 
                    <Image Source="ToolBar_FicJoints.png" />
                </Button>
            </Grid>   

不幸的是,我只看到图像,而不是文字? 请问有人有想法吗?

谢谢

【问题讨论】:

  • 只需将它们包装在 StackPanel/Grid 中。

标签: c# wpf xaml templates styles


【解决方案1】:

也许你可以尝试一些更简单的方法:

<Button>
<StackPanel Orientation="Horizontal">
    <Image Source="yourimage.jpg" />
    <TextBlock>Button content</TextBlock>
</StackPanel>
</Button>

【讨论】:

    【解决方案2】:

    您可以将 2 个元素包装在单个元素中,例如 StackPanel

    例子:

    <ControlTemplate TargetType="{x:Type Button}" x:Key="BoutonImageEtTexte">
        <Button Grid.Column="2" BorderBrush="Transparent" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center" Width="90" Height="27" >
            <Button.Content>
                <StackPanel Orientation="Horizontal">
                    <Border CornerRadius="3">
                        <ContentPresenter/>
                        <Border.Style>
                            <Style TargetType="{x:Type Border}">
                                <Setter Property="Background" Value="#58585a" />
                                <Style.Triggers>
                                    <Trigger Property="IsMouseOver" Value="True">
                                        <Setter Property="Background" Value="{StaticResource DegradeCouleurTheme}" />
                                    </Trigger>
                                </Style.Triggers>
                            </Style>
                        </Border.Style>
                    </Border>
                    <Label>
                        <Label.Content>Fichiers joints</Label.Content>
                        <Label.Foreground>white</Label.Foreground>
                        <Label.VerticalAlignment>center</Label.VerticalAlignment>
                        <Label.HorizontalAlignment>center</Label.HorizontalAlignment>
                    </Label>
                </StackPanel>
            </Button.Content>
            <Button.Style>
                <Style TargetType="{x:Type Button}" >
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type Button}" >
                                <ContentPresenter />
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </Button.Style>
        </Button>
    </ControlTemplate>
    

    【讨论】:

    • 非常感谢 stackPanel 的想法!但是,我可以使用 ContentPresenter 在此模板的调用中指定文本和图像吗?我想在我的 Page1.xaml 中指定文本和图像?是否可以 ?我试过但......没有成功:(
    • 我编辑了我的第一篇文章。我做了你的修改,但我只看到图像,而不是文本。请问你有什么想法吗?非常感谢:)
    【解决方案3】:

    您会发现创建一个内部带有图像的按钮会给您带来丑陋的边框,应该避免这种情况。一种解决方法是为图像创建事件。

    例如,您可以创建一个OnMouseOver 事件,将按钮切换到新图像、文本或带文本的图像,或者您选择的任何内容。

    您还可以创建一个OnClick 事件,该事件可以触发图像执行任务,就像它是一个按钮一样。

    在这种情况下,我所做的是创建一个看起来像自定义按钮的图像,然后创建相同的图像,并对其进行修改,使其周围出现边框。

    我制作了一个 OnMouseOver 来切换图像(因此出现了带边框的图像),并制作了一个 OnClick 来完成我需要的功能。

    然后,您可以将此模板用于使用自定义按钮的任何其他情况。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2019-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      相关资源
      最近更新 更多