【发布时间】:2015-03-16 06:44:39
【问题描述】:
appbar_star静态资源是modern-icons设计的star
StarToggleButtonStyle
<Style x:Key="StarToggleButtonStyle" TargetType="ToggleButton">
<Setter Property="Foreground" Value="White"/>
<Setter Property="BorderBrush" Value="Black"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
RecognizesAccessKey="True"
ContentTemplate="{TemplateBinding ContentTemplate}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
</Border>
<ControlTemplate.Triggers>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
用法
<ToggleButton cal:Message.Attach="Favorite($dataContext)" Width="15" Height="15" Style="{StaticResource StarToggleButtonStyle}" Margin="10,0,0,0">
<Rectangle Width="10" Height="10" Fill="{Binding Path=Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ToggleButton}}}">
<Rectangle.OpacityMask>
<VisualBrush Stretch="Fill" Visual="{StaticResource appbar_star}" />
</Rectangle.OpacityMask>
</Rectangle>
</ToggleButton>
但是,这是我从上面的标记中得到的:
我希望边框跟随内容图标,而不是方形边框。如何做到这一点?
【问题讨论】:
-
stackoverflow.com/questions/1697413/… 或者用圆形代替矩形。
-
我不明白...矩形与什么有什么关系?现代图标中的图标大多是 canvas,所以我使用 OpacityMask 的 Rectangle 来放置图标并使其成为 ToggleButton 的内容。我愿意接受建议。
-
我可能不明白你在说什么。当您谈到“边框”时,我假设它来自您引用和讨论的 Rectangle 以及它具有的任何默认样式。也许我很困惑忽略。
-
你是追求视觉效果(轮廓),还是希望可点击区域跟随形状?
-
我正在尝试创建一个形状像星星的按钮。而已。如果我从 StarToggleButtonStyle 中删除
<Border>,我将得到一个星形按钮,因为我将按钮的内容设置为星形图标。问题是,当 ToggleButton 没有 选中时,我希望星星是透明的,带有边框。当 ToggleButton is checked 我希望星星被黄色填充。我知道如何为此使用触发器,但我不知道如何在星星周围显示边框。
标签: wpf expression-blend wpf-style