Wal*_*oni 5 wpf xaml templates styles
我想创建一个按钮模板,以便在按钮中显示图像和标签.我很兴奋在按钮上使用水平堆叠面板.
我没有成功显示标签.
这是我的模板:
<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>
Run Code Online (Sandbox Code Playgroud)
以下是我对此模板的调用:
<Grid Margin ="10,180,10,14">
<Button Template="{StaticResource BoutonImageEtTexte}" HorizontalAlignment="Left" Margin="13,0,0,0">
<Image Source="ToolBar_FicJoints.png" />
</Button>
</Grid>
Run Code Online (Sandbox Code Playgroud)
这是另一种使用Textbox而不是Label的方法
<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>
<TextBlock Text="LabelText" />
</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>
Run Code Online (Sandbox Code Playgroud)
我的问题是我看到我的图像,而不是我在模板中指定的标签.有人可以帮我吗?
非常感谢 :)
Nat*_*yer 12
TextBlock比标签更符合您的需求.如果您不使用额外标签功能(例如目标,对象内容),请坚持使用良好的'ole TextBlock.
如果要禁用所有按钮样式并且只在按钮中有图像和标签(注意,这会使鼠标悬停/ mousedown效果无效,但您可以在触发器中提供逻辑):
<ControlTemplate TargetType="{x:Type Button}" x:Key="SimpleButton">
<ContentPresenter/>
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)
用法:
<Button Template="{StaticResource SimpleButton}">
<StackPanel Orientation="Horizontal">
<Image Source="ToolBar_FicJoints.png" />
<TextBlock Text="LabelText" />
</StackPanel>
</Button>
Run Code Online (Sandbox Code Playgroud)
如果您只想在正常样式按钮中使用Image/TextBlock,则更容易:
<Button>
<StackPanel Orientation="Horizontal">
<Image Source="ToolBar_FicJoints.png" />
<TextBlock Text="Fichiers joints" />
</StackPanel>
</Button>
Run Code Online (Sandbox Code Playgroud)