6

Kodumda fazlalık olmaması için birkaç sınıfın daha genel bir Silverlight kullanıcı denetimi miras almasına izin vermeye çalışıyorum. Sınıflar, daha sonra Kullanıcı Kontrol sınıfını miras alan genişletilmiş kontrolü devralır. Çalıştığım sorun, her kaldığımda, yanlış kalıtımla (Kullanıcı Denetimi Genişletilmiş Denetimi kullanmıyor) ExtendedControlExtension.g.cs dosyasının yeniden üretilmesidir. Ben .cs ve g.cs dosyalarında Genişletilmiş Kontrol miras, ancak bu hatayıSilverlight Kullanıcı Kontrolü Kısmi Sınıfları ile Kalıtım

Hata 29 etiketi 'neden olarak .aspx dosyası Kullanıcı Kontrol etiketini kullanmaya devam edilmiştir

Not ExtendedControl 'XML ad alanında' http://schemas.microsoft.com/winfx/2006/xaml/presentation 'adresinde bulunmamaktadır.

Bunu düzeltmenin bir yolu var mı?

Teşekkürler!

cevap

9

.g.cs dosyasını değiştiremezsiniz, aslında dosyada bu kadar doğru yazıyor. Ayrıca, "özel kontrol" terimini kullanmak talihsiz bir durumdur, çünkü bu, ne yapmaya çalıştığınızı değil, belirli bir şey anlamına gelir. Ama iyi haber şu ki, yapmaya çalıştığınız şey mümkün. UserControl den

Derive:

public class FancyUserControl : UserControl 
{ 
    // Your added common functionality. 
} 

ve daha sonra normal mekanizmasını kullanarak projenize yeni UserControl eklemek en UserControl1 diyelim.

<local:FancyUserControl x:Class="SilverlightApplication1.UserControl1" 
    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" 
    xmlns:local="clr-namespace:SilverlightApplication1" 
    mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="400"> 

    <Grid x:Name="LayoutRoot" Background="White"> 

    </Grid> 
</local:FancyUserControl> 

uygulamanıza ayarlayarak, onlara local ile üç satır özel dikkat şöyledir: Sonra UserControl.xaml dosyaları düzenlemek.

public partial class UserControl1 : FancyUserControl 
{ 
    public UserControl1() 
    { 
     InitializeComponent(); 
    } 
} 

ve Visual Studio henüz oldukça mutlu olmayacak ama sonunda projenizi yeniden inşa etmek ve her şey iyi olacak: Sonra şöyle UserControl1.xaml.cs dosyasını düzenlemek.

UserControl1 sınıfı, UserControl yerine FancyUserControl türetilmiştir ve ortak işlevlerinizi eklemeye başlayabilirsiniz. Daha fazla kontrol eklemek için, her yeni kontrolü projeye ilk kez ekledikten sonra XAML ve kod arkaplanı el ile düzenlemeniz gerekir.

+0

Çok eksiksiz bir yanıt için teşekkürler (ve .gs dosyalarını düzenlememeniz gerektiğini anlıyorum, ama soruyu cevaplayana kadar ihtiyaç duyduğum işlevselliği elde etmenin tek yolu buydu)! – badpanda

+0

+1 İyi yapılandırılmış bir cevap. – AnthonyWJones