2016-04-17 39 views
1

我試圖創建從標準的TextBlock這樣繼承的自定義WPF控件:如何引用自定義WPF控件在generic.xaml

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

的根據generic.xaml看起來是這樣的:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:local="clr-namespace:Test"> 
    <Style TargetType="{x:Type local:DynamicDateTextBlock}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type local:DynamicDateTextBlock}"> 
        <Border Background="{TemplateBinding Background}" 
          BorderBrush="{TemplateBinding BorderBrush}" 
          BorderThickness="{TemplateBinding BorderThickness}" /> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ResourceDictionary> 

如果我把Control.cs放在我的Solution Test的根目錄下,一切正常。 但如果我將其移動到子文件夾測試\控制並相應地更改命名空間突然generic.xaml是給編譯錯誤

名稱「DynamicDateTextBlock」沒有命名空間「CLR的命名空間中:測試。控制」

的CS命名空間被改爲Test.Controls

,並在XAML我嘗試使用這樣的:xmlns:local="clr-namespace:Test.Controls"

是還有什麼我必須做的?

使用Resharper重構控件以移動它會導致同樣的問題。

回答

0

當您將您的DynamicDateTextBlock文件夾移動到Controls文件夾並更改xmlns:local="clr-namespace:Test.Controls"時,嘗試重建並運行應用程序,即使出現錯誤。應用程序應該啓動。你所有的行爲都是正確的。

更新: 在更改xaml xmlns:local="clr-namespace:Test.Controls"之後,您應該再次用手鍵入。我用手輸入,沒有錯誤。

+0

這就是我想,但之後我感動的控制給它沒有編譯了:'有建立errors.' 試圖運行後,錯誤列表顯示多了一個: '找不到樣式屬性「模板'在類型'Test.Controls.DynamicDateTextBlock'上。 5號線位置17.' – Mikk

+0

@Mikk請看我最新的答案。隨意問任何問題。 – StepUp

+0

這很奇怪,對我而言,即使是手工添加新的空白解決方案也無濟於事。 autocomplete在intellisense中暗示完全相同..但我無法構建並運行結果。 – Mikk