【问题标题】:Create a custom control in wpf for mahapps tile在 wpf 中为 mahapps tile 创建一个自定义控件
【发布时间】:2017-12-22 00:08:17
【问题描述】:

我不想为 mahapps 创建一个自定义控件来制作具有绑定属性的自定义磁贴控件,以便在磁贴内制作图标

控制xml代码

<Style TargetType="{x:Type local:iTile}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:iTile}">
                <controls:Tile Title="{TemplateBinding Title}"
                               HorizontalTitleAlignment="Left"
                               HorizontalContentAlignment="Right"
                               Height="100" Width="100"
                               Margin="0"
                               VerticalContentAlignment="Top">
                    <Rectangle Fill="Black" Height="45" Width="45" Margin="0,10,8,0">
                        <Rectangle.OpacityMask>
                            <VisualBrush Visual="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Icon}" Stretch="Uniform" />
                        </Rectangle.OpacityMask>
                    </Rectangle>
                </controls:Tile>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

控制 csharp 代码

public class iTile : Tile
{
    static iTile()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(iTile), new FrameworkPropertyMetadata(typeof(iTile)));
    }

    public static readonly DependencyProperty IconProperty =
    DependencyProperty.Register("Icon", typeof(Object), typeof(iTile), new UIPropertyMetadata());

    public Object Icon
    {
        get { return GetValue(IconProperty); }
        set { SetValue(IconProperty, value); }
    }
}

像这样控制使用

<iControls:iTile Title="Some Title"
                         Icon="{iconPacks:PackIconMaterial Kind=AccountOff}"/>

但图标不只显示磁贴的标题。

【问题讨论】:

    标签: c# wpf tile


    【解决方案1】:

    您可以在模板中将Visual 属性设置为PackIconMaterial

    <ControlTemplate TargetType="{x:Type local:iTile}">
        <controls:Tile Title="{TemplateBinding Title}"
                                   HorizontalTitleAlignment="Left"
                                   HorizontalContentAlignment="Right"
                                   Height="100" Width="100"
                                   Margin="0"
                                   VerticalContentAlignment="Top">
            <Rectangle Fill="Black" Height="45" Width="45" Margin="0,10,8,0">
                <Rectangle.OpacityMask>
                    <VisualBrush Stretch="Uniform">
                        <VisualBrush.Visual>
                            <iconPacks:PackIconMaterial Kind="{Binding Icon, RelativeSource={RelativeSource TemplatedParent}}" />
                        </VisualBrush.Visual>
                    </VisualBrush>
                </Rectangle.OpacityMask>
            </Rectangle>
        </controls:Tile>
    </ControlTemplate>
    

    ...然后将Icon属性设置为枚举值:

    <iControls:iTile Title="Some Title"
                 Icon="{x:Static iconPacks:PackIconMaterialKind.AccountOff}"/>
    

    【讨论】:

    • 感谢您的重播,但为什么没有显示图标,因为可能是我使用了材料,也可能使用了其他来源。我该如何解决这个问题
    • “我该如何解决这个问题”?你在开玩笑吗?再次阅读我的答案并将其复制到您的项目中。它确实解决了您的问题。
    • 对不起,我的意思是我想绑定整个视觉不友好
    • 为什么?这显然行不通。因此,您可以选择一个有效的解决方案并给您完全相同的结果,或者您可以选择一个不起作用的解决方案。这应该是一个非常容易的选择。
    猜你喜欢
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多