2017-07-17 97 views
1

我wan't创建一个自定义控制mahapps使已绑定属性的视觉,使砖内的图标定制区块控制创建WPF自定义控制mahapps瓦

控制XAML代码

<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}"/> 

但图标不显示只是瓷砖的标题。

回答

0

您可以设置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}"/> 
+0

感谢您的重播,但为什么图标不显示,因为可能是我使用的材料,也许使用其他来源。我该如何解决这个问题 –

+0

“我该如何解决这个问题”?你在开玩笑吗?再次阅读我的答案,并将其复制到您的项目中。它确实解决了你的问题。 – mm8

+0

对不起,我的意思是我想约束整个视觉而不是那种 –