好的,我已经为我想要在我的应用中使用的Buttons
制作了新样式。一般的想法是有10个方格Button
,其中我将有一个Image
,并且在TextBlock
之下。
我的问题是,我想为每个Image.Source
设置TextBlock.Text
和Button
不同。
我在做什么是这样的:
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="Border" CornerRadius="5" BorderThickness="1" Background="Gray" BorderBrush="Orange">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Image Margin="0,5,0,0" Grid.Row="0" Width="25" Height="25" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBlock FontSize="12"/>
</Grid>
</Border>
为了充分利用我的风格,我该怎么做?
<Button Style="{DynamicResource MenuButtons}" Text="????" x:Name="LiveB" Source="????" Click="Live_Click"/>
提前致谢。
答案 0 :(得分:2)
如果所有你需要的是一张图片和一些文字,你可以使用按钮.Tag
和.Content
使其工作(误):
<Style x:Key="MenuButtons" ...
...
<ControlTemplate TargetType="{x:Type Button}" >
<Border x:Name="Border" CornerRadius="5" BorderThickness="1" Background="Gray" BorderBrush="Orange">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Image Width="25" Height="25" VerticalAlignment="Center" HorizontalAlignment="Center"
Source="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Tag}" />
<TextBlock FontSize="12" Text="{TemplateBinding Content}" Grid.Row="1" />
</Grid>
</Border>
</ControlTemplate>
...
..然后:
<Button Style="{DynamicResource MenuButtons}" x:Name="LiveB"
Content="MyText la la la..." Tag="http://programming.enthuses.me/1.png"
Click="Live_Click" />
如果您需要更多自定义内容,则需要查看Konstantin Zhukov的评论和Attached Properties
。
(为什么你不能只使用"{TemplateBinding Tag}"
代替"...{RelativeSource TemplatedParent}..."
?我不知道,但TemplateBinding
通常是一个非常脆弱的捷径并不总是做它应该做的......)
答案 1 :(得分:1)
你需要做的是创建一个类,它将作为按钮
的DataContextClass ButtonDataContext
{
public String TextBlockText {get;set;}
public String ImageSource {get;set;}
}
然后做
LiveB.DataContext = new ButtonDataContext(){TextBlockText = "text", ImageSource = "Image Path"};
在控制模板XAML
中<Image Source="{Binding Path=ImageSource}" Margin="0,5,0,0" Grid.Row="0" Width="25" Height="25" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBlock Text="{Binding Path=TextBlockText}" FontSize="12"/>