2014-07-03 157 views
0

使用XAML我已经从控制派生的自定义WPF控件和一些路径XAML代码:自定义控制

<Path Width="16" Height="16" Margin="6,0,0,0" x:Key="CheckMark" SnapsToDevicePixels="False" Stroke="Black" Fill="Black" StrokeThickness="1" 
    Data="M 12.4227,0.00012207C 12.4867,0.126587 12.5333,0.274536 
     12.6787,0.321411C 9.49199,3.24792 6.704,6.57336 
     4.69865,10.6827C 4.04399,11.08 3.47066,11.5573 2.83199, 
     11.9706C 2.09467,10.2198 1.692,8.13196 3.8147e-006, 
     7.33606C 0.500004,6.79871 1.31733,6.05994 1.93067,6.2428C 
     2.85999,6.51868 3.14,7.9054 3.60399,8.81604C 5.80133, 
     5.5387 8.53734,2.19202 12.4227,0.00012207 Z " /> 

这条道路应该控制的OnRender将用来绘制一些复选标记。

问题是我应该在哪里放置这个XAML路径?我的自定义控件没有自己的XAML文件,但它在Generic.xaml声明的缺省风格

<Style TargetType="{x:Type layers:TargetsGrid}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type layers:TargetsGrid}"> 
       <Border Background="{TemplateBinding Background}" 
         BorderBrush="{TemplateBinding BorderBrush}" 
         BorderThickness="{TemplateBinding BorderThickness}"> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

很显然,我能型路径的依赖属性添加到控制和默认样式分配给它,但有没有更简单的方法?也许我应该把我的路径放到一个单独的XAML文件中?

+0

Generic.xaml文件是我会把它放在哪里。那有什么问题? –

+0

我不喜欢此var uri = String.Format(“pack:// application:,,,/{0}; Component/Themes/Generic.xaml”,System.Reflection.Assembly.GetExecutingAssembly()。GetName()。Name );这将是更好地摆脱“包:/ /应用程序:,,,/{0};组件/主题/ Generic.xaml”和使用类型路径 – Dmitriano

回答

0

您可以创建一个单独的资源字典,把你的路径在说了,这样做:

//Pseudo code, not tested 
var resourcs = new ResourceDictionary(new Uri("path to your ResourceDictionary")) 
var path = (Path)resources["MyPath"]; 

或者你可以在代码中完全创建路径,如果你不打算重用。

或者您可以将它保存在Generic.xaml中并与ControlTemplate一起使用,但我并没有真正看到这个问题。

+0

类型的依赖项属性我试过这个,它的工作原理,但这段代码是比Path类型的依赖项属性更复杂。 – Dmitriano

1

为什么不把它放在边界内?

<ControlTemplate TargetType="{x:Type layers:TargetsGrid}"> 
     <Border Background="{TemplateBinding Background}" 
       BorderBrush="{TemplateBinding BorderBrush}" 
       BorderThickness="{TemplateBinding BorderThickness}"> 

      <Path ... /> 

     </Border> 
    </ControlTemplate> 
+0

而且由于这是一个复选标记,您可能希望根据用户交互设置的布尔属性来切换可见性... –

+0

我在OnRender()中绘制多个复选标记,此复选标记的计数和坐标取决于各种参数在C#代码中处理。 – Dmitriano