2017-07-17 137 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

對不起,我的意思是我想約束整個視覺而不是那種 –