回答
AFAIK你不能繼承xaml,你只能繼承後面的代碼。
我們最近在我們的項目中遇到了同樣的問題。我們最終解決問題的方式是創建一個usercontrol並將其添加到「child」usercontrol。
如果不工作/幫忙看看這個: http://geekswithblogs.net/lbugnion/archive/2007/03/02/107747.aspx1
嗯..你創建基本控制
public abstract class BaseUserControl : UserControl{...}
然後在XAML文件:
<Controls:BaseUserControl x:Class="Termo.Win.Controls.ChildControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Controls="clr-namespace:Namespace.Of.Your.BaseControl">
這應該工作。
編輯:嗯..這個例子是有用的,當你有一個沒有XAML的基礎控制,然後從它繼承。另一種方式(從與Xaml的基本控制) - 我不知道你怎麼可以去做。
編輯2:顯然從this post + comments我把你想要的可能是不可能的。
此解決方案適用於我。 – GeekyMonkey 2009-01-14 14:54:45
我可能有一點的解決方案:組合物,而不是繼承 - 我想出了控制,具有「內容槽」通過數據綁定從外部賦值,看看我的SO thread。使用的
實施例:
<UserControl ... >
<!-- My wrapping XAML -->
<Common:DialogControl>
<Common:DialogControl.Heading>
<!-- Slot for a string -->
</Common:DialogControl.Heading>
<Common:DialogControl.Control>
<!-- Concrete dialog's content goes here -->
</Common:DialogControl.Control>
<Common:DialogControl.Buttons>
<!-- Concrete dialog's buttons go here -->
</Common:DialogControl.Buttons>
</Common:DialogControl>
<!-- /My wrapping XAML -->
</UserControl>
在代碼隱藏一些處理代碼一起這將是對話窗口一個很好的基礎組分。
您可以通過使用delegate
來完成此操作。
本質上,您需要創建一個接口(YourInterface
),它包裝了所需的功能,然後使用戶控件和類都實現該接口。
接下來,請確保用戶控件引用了IYourInterface
類型的對象,以便當您的用戶控件嘗試調用Interface
的方法時,它會調用您的類的方法。
因爲用戶控件和類都實現相同的接口,所以它們可以看作是同一種類型的對象 - 這意味着您可以將它們都放入類型爲IYourInterface
的對象集合中。這應該給你你想要的行爲。
在ASP中。NET我經常使用這種技術,通過讓我的類繼承abstract class
祖先。我不明白爲什麼WPF不支持這一點。 :(
不能繼承的XAML代碼它的自我然而創建一個抽象類的代碼隱藏的,可以讓你在代碼編輯的背後,從一個派生類對象
XAML代碼:{Window1.xaml }
<Window
x:Class="WPFSamples.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="auto" Width="256" Title="WPF Sameples">
<Grid>
<Button x:Name="Button1" VerticalAlignment="Center" HorizontalAlignment="Center" Content="Click Me"/>
</Grid>
</Window>
代碼隱藏:{Window1.xaml.cs}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WPFSamples
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public abstract partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
}
}
派生類:{DisabledButtonWindow.cs}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WPFSamples
{
public sealed class DisabledButtonWindow : Window1
{
public DisabledButtonWindow()
{
Button1.IsEnabled = false;
}
}
}
儘管無法從wpf源自身繼承,但您可以使用此「Window1」控件作爲所有其他派生控件的模板。
我認爲你可以做到這一點,但你必須重新定義你在子類中的xaml中引用的任何函數和其他可能的東西。
IE如果你有一個你在基類xaml中訂閱的按鈕單擊事件,你將需要重寫子類中的按鈕單擊並調用基類按鈕單擊事件。
由於這是我正在繪製的同事代碼,所以沒有百分之百的確定細節,但認爲這將給任何希望在未來實現此目標的人帶來開始。
- 1. wpf - 用戶控件繼承
- 2. WPF用戶控件繼承
- 3. WPF窗口/用戶控件繼承XAML
- 4. WPF用戶控件繼承3
- 5. 如何從基本WPF用戶控件繼承從屬屬性到繼承的新用戶控件?
- 6. 用戶控件從Wpf中的ListBox繼承?
- 7. 從WPF窗口或用戶控件繼承
- 8. 繼承用戶控件
- 9. ASP.NET用戶控件繼承
- 10. WPF注入或繼承用戶控件中的名稱
- 11. 用戶控件從另一個用戶控件繼承
- 12. 用戶控件中的Eval繼承
- 13. 我不明白繼承wpf用戶控件的語法
- 14. 尋找一些關於用戶控件/繼承的WPF建議
- 15. WPF MVVM視圖/用戶控件繼承或類似的概念?
- 16. 檢測繼承的用戶控件
- 17. 試圖讓一個WPF用戶控件繼承一個類
- 18. WPF繼承用戶控件失去VS設計器支持
- 19. WPF - 反思控制繼承
- 20. 防止WPF控件繼承windowstyle
- 21. 我應該繼承哪些WPF控件?
- 22. 繼承Silverlight用戶控件部分類
- 23. 用戶控件繼承問題
- 24. 繼承控件
- 25. 如何更改繼承的項目在繼承用戶控件中的位置
- 26. WPF:包含控件與繼承控件的自定義UserControl
- 27. WPF - 從用戶控件操控的VisualState
- 28. 繼承EDIT控件
- 29. 如何在用戶控件中使用我的繼承屬性?
- 30. 視覺繼承在VS2008中的用戶控件中工作
有關WPF解決方法的可視化繼承,請參閱:http://svetoslavsavov.blogspot.gr/2009/09/user-control-inheritance-in-wpf.html或在祖先中顯式定義GUI請參見http:// support.microsoft.com/kb/957231 – 2015-01-10 01:50:15