我想做一个像Facebook导航栏的UI。我的想法是将按钮的背景设置为透明,并在其上放置一个图标作为矩形的不透明掩模,并更改其填充。我在创建样式时很困惑。
这里是代码
for (int i = 0; i < 6; i++)
{
Button btn = new Button
{
Name = ("btnUi" + i).ToString(),
Width = 42,
Height = 42,
Content = new Rectangle
{
Fill = Brushes.DarkBlue,
OpacityMask = new ImageBrush
{
ImageSource = new BitmapImage(new Uri(Directory.GetCurrentDirectory() + @"imagesui_0" + (i + 1).ToString() + ".png"))
},
VerticalAlignment = VerticalAlignment.Center,
Width = 32,
Height = 32
},
Style = this.FindResource("uiStyle01") as Style
};
if (i == 0) btn.IsEnabled = false;
btn.Click += btnUi_Click;
uiPanel.Children.Add(btn);
}
和App.xaml
<Application.Resources>
<Style TargetType="Button" x:Key="uiStyle01">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Rectangle x:Name="Rectangle" Fill="MidnightBlue">
</Rectangle>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Rectangle" Property="Fill" Value="Gray"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Application.Resources>
我也很感激任何让它更容易的想法。
facebook_sample_image
Style中的"Template"将覆盖您添加的图像作为c#
的内容模板是简单的添加内容到按钮。
简单的解决方案
从xaml的样式中删除"Template" .
下使用<Style TargetType="Button" x:Key="uiStyle01">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="Gray"/>
</Trigger>
</Style.Triggers>
</Style>
这将简单地更新按钮的背景,并保持图像的原样。