2009-08-19 18 views
12

Ayrı ayrı Silverlight Sayfa sınıfları için .xaml dosyalarında ortak bir temel sınıf nasıl belirtebilirsiniz? Sayfalar arasında paylaşmak istediğim birkaç ortak özellik var. Ancak, her oluşturuldukları zaman .g.cs dosyalarındaki temel sınıfı manuel olarak değiştirmeden bunu nasıl yapacağımı bilmiyorum..xaml dosyalarında (Silverlight) farklı bir temel sınıf nasıl belirlersiniz?

Bu mümkün mü? Örneğin, Toolkit'teki ChildControl farklı bir sınıftan türediğinden mümkün olduğunu varsayalım. Açık bir şey mi görüyorum?

cevap

29

Tüm Silverlight "sayfaları" aslında varsayılan olarak UserControl türünden türetilmiştir. Yani, yapmanız gereken şey. Basit örnek, elbette Bağımlılık özelliklerini, olaylarını ve daha fazlasını bildirmek isteyebilirsiniz.

1.

public class YourUserControlBase : UserControl 
{ 
    public bool SomeProperty {get; set; } 
} 

2. Yeni içeren yerel montaj ve ad alanı için bir XML ad alanını Add/Oluştur Page'in XAML

değiştirmek ortak özelliklere sahip sınıfınızı oluşturun base class ve dosyanın en üstündeki x:Class özniteliğini tuttuğunu unutmayın, ancak UserControl kök öğesini

olarak değiştirin.

<local:YourUserControlBase 
xmlns:local="clr-namespace:SilverlightApplication1" 
x:Class="SilverlightApplication1.MainPage" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480"> 

düzgün devralmak için (değil otomatik oluşturulan birini Page.xaml.cs dosya)

-arkasındaki kodu değiştirin:İşte benim güncelleştirilmiş dosya var YourUserControlBase'dan itibaren:

public partial class MainPage : YourUserControlBase 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 
    } 
} 

Bu olmalı! İyi şanslar.

+0

Sağol! Başlangıçta, 'onun adını geliştirici ile paylaştığı ilginç ...' ;-) düşündüm. Otomatik tamamlamayı da seviyorum. Sadece patronlarımın patlamasını sağlayan özel bir şablon oluşturdum, teşekkürler. Olsa da, kredi aldı =) – Travis

+0

Ayrıca, eğer eklemek ve daha fazla sorun bir tane eklemek istediğiniz özelliklerin dışında iseniz ... Ben gibi bir şey arıyordum: x: BaseClass = "Namespace .YourUserControlBase " Tekrar teşekkürler! – Travis

+0

XAML uyumluluğu oradan beri zor bir durum, ama evet bunu duyuyorum - Geri bildirimi paylaşacağım. Yardım ettiğim için sevindim! –

6

Ayrıca: Eğer baz sınıfın bir başka montaj (proje) olduğunda bunu yapabilirsiniz:

xmlns:Custom="clr-namespace:SilverlightApplication1;assembly=[Other.Assembly]"

İlgili konular