2011-08-30 94 views
3

我正在構建一個自定義的UserControl,它允許我在ProgressBar中放置文本。問題是,沒有一個ProgressBar的DependencyProperties被轉移。這是我的自定義UserControl的XAML。訪問UserControl的內部控件

<UserControl 
    x:Class = "MyProgram.MyCustomProgressBar" 
    xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" > 

    <Grid> 
     <ProgressBar Name="uiProgressBar" /> 
     <Label   Name="uiLabel"   /> 
    </Grid> 
</UserControl> 

當我開始使用此UseControl時,如何從XAML訪問和設置最小值,最大值,值等。

<local:MyCustomProgressBar x:Name="uiLoadTime" ??.uiProgressBar.Maximum="50" /> 

我希望我不需要重新定義一堆DependencyProperties以獲得此功能。

回答

2

通常的方法是使用DependencyProperty ......一旦你習慣了它,真的沒那麼糟糕。

在usercontrol的代碼隱藏代碼中使用內置代碼段中的「propdp」。

讓我們以ProgressBar.Maximum例如:

做一個整數的DependencyProperty爲100,默認值(或任何你喜歡),將其命名爲InnerProgressBarMax。

<ProgressBar Maximum="{Binding InnerProgressBarMax, ElementName=myUsrCtrl}" /> 

當你使用你的應用程序的另一部分控制,只需輸入一個值這樣的:

在你的用戶控件的XAML中,這種方式將其綁定

<local:MyCustomProgressBar x:Name="uiLoadTime" InnerProgressBarMax="50" /> 

沖洗&重複您想要公開的每個屬性。

編輯: 如果您確實需要暴露50+ DP,則可以通過爲您的DP指定智能默認值來降低杵。

要做到這一點,當你創建一個DP,設置new PropertyMetadata(YOUR_DEFAULT_VALUE)

參數一旦做到這一點,你可以控制很多暴露的DPS,但你只需要在XAML代碼手動設置幾使用該控件。

+1

是的,但我真的不想處理重新定義50個不同的PropertyDependencies並處理它們的Coerce和Validation方法時,我可以直接訪問它們。 – Dave

+0

你能否請你在需要暴露的許多不同的DP上逃避?你可能會遇到一個架構問題。另請參閱我的編輯。 –

1

將所有內容封裝在DependencyProperties中的替代方法是讓UserControl的用戶提供ProgressBar。它看起來是這樣的:

<local:MyCustomProgressBar x:Name="uiLoadTime"> <local:MyCustomProgressBar.ProgressBar> <ProgressBar Maximum="50" /> </local:MyCustomProgressBar.ProgressBar> </local:MyCustomProgressBar>

然後在MyCustomProgressBar.xaml.cs,你會暴露一個進度條公共財產。在其setter中,修改屬性,但是將其添加到UserControl的根Grid

相關問題