2012-05-03 20 views
1

嗨我已經創建了一些基於在這裏找到的信息的子類別usercontrols; http://csharpsimplified.wordpress.com/2011/09/21/subclassing-wpf-user-control/但我遇到問題。子類化WPF UserControl不適用於所有項目

這是我的基類保存在TestUserControl項目中。

namespace TestUserControl 
{ 
    public class BaseDataGridControl : UserControl 
    { 
     protected BaseDataGridControl() 
     { 
     } 
    } 
} 

這是我的具體類;

<view:BaseDataGridControl x:Class="TestUserControl.Concrete" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:view="clr-namespace:TestUserControl"  
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300"> 
    <Grid> 
     <Button Height="20" Width="60" Margin="12,12,228,268" /> 
    </Grid> 
</view:BaseDataGridControl> 

並且這個控制後面的代碼看起來像這樣;

public partial class Concrete : BaseDataGridControl 
{ 
    public Concrete() 
    { 
     InitializeComponent(); 
    } 
} 

我可以在同一個TestUserControl項目的窗口中放下我的具體類沒有任何問題;

<Window x:Class="TestUserControl.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525" xmlns:my="clr-namespace:TestUserControl"> 
    <Grid> 
     <my:Concrete HorizontalAlignment="Left" Margin="88,39,0,0" x:Name="concrete1" VerticalAlignment="Top" /> 
    </Grid> 
</Window> 

這一切工作正常。

問題是當我嘗試在另一個項目中使用具體類。

如果我創建另一個項目(WPFApplication1)並根據具體的類創建一個類,例如

namespace WpfApplication1 
{ 
    public class SubClass : Concrete 
    { 
    } 
} 

當我試圖把它放到WPFApplication1項目中的一個窗口上我得到一個;

「枚舉是無效的,因爲集合改變」

如果我嘗試通過XAML添加它,我得到一個

「組件‘WpfApplication1.SubClass’沒有被識別的資源URI'/TestUserControl;component/concrete.xaml'。

錯誤消息。

WPFApplication1項目引用了TestUserControl項目。

有沒有人有任何線索爲什麼這可以在usercontrol定義的項目中工作,但只要你試圖在一個單獨的項目中繼承它就會失敗?

我已經在VS2010和VS11測試版中試過這個,結果相同。

我沒有使用反射或訪問類的構造函數中的任何集合,代碼就是你在這裏看到的。

我有測試項目,證明這個問題,如果它會幫助?

謝謝....

+0

示例項目可以從https://skydrive.live.com/redir.aspx?cid=150630a5c1433bff&resid=150630A5C1433BFF下載!120&parid = root –

+0

你試過了嗎.. public _partial_ class SubClass:Concrete? – Rusty

+0

我做了,但沒有任何區別。 –

回答

0

跑進類似的問題。我有一個基礎用戶界面的項目,其中一些項目是用戶控件。 (我們將稱這個項目爲「BaseUI」)。在我的第二個項目中(我們將其稱爲「SubProj」),我可以添加它的引用並將它添加到Visual Studio中的xaml中,但我無法使用Blend查看更改。現在我不能用它來進行一些更復雜的編輯。

它產生錯誤「[組件名稱放在這裏]命名空間中的[你引用的命名空間]不存在」

,我發現此修復程序可能會允許你從它繼承,以及在你的子項目。

您可以使用鏈接將代碼添加到當前程序集中,而不是直接從引用的程序集中嘗試使用該類。該鏈接使控件的行爲就像它在現有項目中一樣,但代碼來自基礎項目。對它的任何更改都會影響所有鏈接。您應該能夠從本地繼承,而不會遇到跨項目的問題。

這裏是你如何做到這一點:

  1. 創建你的「BaseUI」項目
  2. 右鍵單擊「SubProj」基本控制,並添加現有項目
  3. 追捕從的.xaml文件您想要的用戶控件的「BaseUI」項目。
  4. 單擊箭頭旁邊的「添加」按鈕,然後選擇「添加爲鏈接」
相關問題