2013-05-06 167 views
0

我有一個用戶控件,我想把它放在一個FixedDocument中,但在此之前我需要更改標籤的文本。我想我需要使用依賴屬性。我如何設置標籤的文本

這裏是簡化的XAML。

<UserControl x:Class="PrinterTest.TestControl" 
      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" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300" 
      DataContext="{Binding RelativeSource={RelativeSource Self}}"> 
    <Grid> 
     <Label Content="{Binding LabelCaption}" 
       Height="24" HorizontalContentAlignment="Right" Name="lblCaption"  
       Width="140" /> 
    </Grid> 
</UserControl> 

而且代碼隱藏

public partial class TestControl : UserControl 
{ 
    public TestControl() 
    { 
     InitializeComponent(); 
    } 

    public readonly static DependencyProperty 
     LabelCaptionDP = DependencyProperty.Register("LabelCaption", 
                typeof(string), 
                typeof(TestControl), 
                new FrameworkPropertyMetadata("no data")); 

    public string LabelCaption 
    { 
     get { return (string)GetValue(LabelCaptionDP); } 
     set { SetValue(LabelCaptionDP, value); } 
    } 

在調用位我通過TestControl myControl = new TestControl();

實例我是什麼做錯了,因爲我不能在控制的新副本訪問屬性?謝謝!

+0

謝謝LPL - 對命名約定進行了修改。 在我的調用代碼中,我試過 UserControl TestControl = new TestControl(); (TestControl)TestControl.LabelCaptionProperty =「Test」; 但我得到一個System.Windows.Controls.UserControl不包含LabelCaptionProperty的定義,我無法在Intellisense中看到任何東西。我在做什麼愚蠢的事情? – 2013-05-06 20:02:13

回答

2

變化LabelCaptionDP變爲LabelCaptionProperty

Dependency Properties Overview

財產,其支持 的DependencyProperty字段的命名規則是很重要的。該字段的名稱始終爲 屬性的名稱,後綴爲Property。有關此慣例的更多信息 以及其原因,請參閱自定義 依賴屬性。

請閱讀有關依賴項屬性名稱約定Custom Dependency Properties

+0

感謝LPL - 制定了這些命名約定的更改。在我的調用代碼中,我嘗試了UserControl TestControl = new TestControl(); (TestControl)TestControl.LabelCaptionProperty =「Test」;但是我得到一個System.Windows.Controls.UserControl不包含LabelCaptionProperty的定義,我在Intellisense中看不到任何東西。我在做什麼愚蠢的事情? – 2013-05-06 20:05:27

+0

爲此使用後端CLR屬性:'((TestControl)TestControl).LabelCaption =「Test」;'。 – LPL 2013-05-06 22:12:23

+0

謝謝。語法排序!這是我寫入WPF樂趣的第一篇文章。我敢說,一旦我的課本到達,我可能會得到它的訣竅。 現在我所要做的就是與我的網格輪廓搏鬥。再次感謝我解除了我的沮喪。 – 2013-05-06 22:39:19