2016-01-26 62 views
3

我已經創建了幾個擁有一些通用屬性的UserControl。是否有可能創建一個基本的用戶控件,具體的可以派生?創建一個Base-UserControl

基類:

public class LabeledControlBase : UserControl { 
    public string ControlWidth { 
     get { return (string)GetValue(ControlWidthProperty); } 
     set { SetValue(ControlWidthProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for ControlWidth. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty ControlWidthProperty = 
     DependencyProperty.Register("ControlWidth", typeof(string), typeof(LabeledControlBase), new PropertyMetadata("Auto")); 
} 

具體類:

public partial class LabeledTextBox : Base.LabeledControlBase { 
    public string LabelText { 
     get { return (string)GetValue(LabelTextProperty); } 
     set { SetValue(LabelTextProperty, value); } 
    } 
    // Using a DependencyProperty as the backing store for LabelText. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty LabelTextProperty = 
     DependencyProperty.Register("LabelText", typeof(string), typeof(LabeledTextBox), new PropertyMetadata(null)); 

    public string TextBoxText { 
     get { return (string)GetValue(TextBoxTextProperty); } 
     set { SetValue(TextBoxTextProperty, value); } 
    } 
    // Using a DependencyProperty as the backing store for TextBoxText. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty TextBoxTextProperty = 
     DependencyProperty.Register("TextBoxText", typeof(string), typeof(LabeledTextBox), new PropertyMetadata(null)); 

我想才達到什麼: 我希望能夠設置「ControlWidth」屬性上從派生的任何用戶控件「 LabeledControlBase」。

問題: 我發現它的方式LabeledTextBox不能識別GetValue和SetValue方法,儘管它繼承自派生自UserControl的LabeledControlBase。當將Base.LabeledControlBase更改爲UserControl時,一切正常(除非我無法訪問我常用的屬性)。

+0

它給編譯時錯誤?或者只是在編輯器中告訴你該方法無法識別? – mike

+0

以及錯誤列表中的編譯時錯誤。錯誤列表說: 錯誤\t CS0103 \t名稱'GetValue'在當前上下文中不存在\t ... – C4p741nZ

+0

呵呵..好笑,我試圖複製你的問題,不能。在Base.LabeledControlBase中,「Base」。 LabeledControlBase的命名空間是否正確? – mike

回答

1

由於我沒有看到LabeledTextBox.xaml我不能確定,但​​我懷疑你的XAML在某種程度上是錯誤的 - 也許使用UserControl作爲根? XAML應該是這樣的:

<wpf:LabeledControlBase 
    x:Class="WPF.LabeledTextBox" 
    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:wpf="clr-namespace:WPF" 
    x:Name="self" 
    mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="300"> 
    <Grid> 
     <TextBox Text="{Binding ElementName=self, Path=ControlWidth}" /> 
    </Grid> 
</wpf:LabeledControlBase> 

...以LabeledControlBase爲根。這讓我在頁面中使用一個LabeledTextBox控制:(。ControlWidth的預期的語義很可能不是我用它做;這只是爲了驗證事情的工作,他們這樣做)

<wpf:LabeledTextBox ControlWidth="Hi" /> 

+0

就是這樣 - 我只是在XAML中做了一些錯誤 - 不知何故,我用我的LabeledTextBox作爲根(而不是我的基類) - 現在我已經改變了一切正常工作!謝謝。 – C4p741nZ