2014-07-03 151 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