0

これが私のユーザーコントロールのXAMLです。

<UserControl x:Name="titledTextBox" x:Class="VitalStats.View.Controls.TitledTextBox"
    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"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    d:DesignHeight="480" d:DesignWidth="480"
    >

    <Grid x:Name="LayoutRoot">
        <StackPanel Orientation="Vertical">
            <TextBlock x:Name="titleTextBlock" 
                       TextWrapping="Wrap" 
                       Margin="12,5,0,-5" 
                       Text="{Binding Title, ElementName=titledTextBox, FallbackValue=Title Here}" 
                       FontSize="20" 
                       Foreground="{StaticResource PhoneSubtleBrush}"/>
            <TextBox x:Name="inputTextBox" Text="{Binding Text, ElementName=titledTextBox, Mode=TwoWay}"/>   
        </StackPanel>
    </Grid>

</UserControl>

これが私のコードビハインドのようです、

// Usings here

namespace VitalStats.View.Controls
{
    public partial class TitledTextBox : UserControl
    {

        [Description("A TextBox with built in title")]
        public TitledTextBox()
        {
            InitializeComponent();

            if (DesignerProperties.GetIsInDesignMode(this)  )
            {
                this.Title = "Title Here";  
            }
        }

        public string Title
        {
            get { return this.GetValue(TitleProperty) as string; }
            set { this.SetValue(TitleProperty, value); }
        }
        public static readonly DependencyProperty TitleProperty =
            DependencyProperty.Register("Title", typeof(string), typeof(TitledTextBox), null);

        public string Text
        {
            get { return this.GetValue(TextProperty) as string; }
            set { this.SetValue(TextProperty, value); }
        }
        public static readonly DependencyProperty TextProperty = 
            DependencyProperty.Register("Text", typeof(string), typeof(TitledTextBox), null);

    }
}

バインディングはUIにデータを読み込むときに機能します(したがって、Titleプロパティは正常に機能します)が、UIから読み取るとき(つまり、コードからアクセスしようとするときText)、プロパティは常にnullであり、バインディングが一方向のみであることを意味します(Mode=TwoWayプロパティにもかかわらず) 。

私は(XamlZealotの回答のおかげで)FindAncestorバインディングを認識AncestorTypeしていますが、Windows Phone 7(またはSilverlight)のXAML名前空間には存在しません。

UserControl次に、プロパティ内からプロパティへの双方向バインディングを設定するにはどうすればよいUserControlですか?

これはWindowsPhone7(7.1プロジェクト)にあります。

4

2 に答える 2

0

RelativeSourceの代わりにバインディングを試してくださいElementName

Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}, Path=Title, FallbackValue=Title Here}"
于 2012-11-07T19:15:36.140 に答える
0

したがって、以下はおそらく私が尋ねたものではなく、問題を解決するために使用したものです。私がやりたかったのは、タイトルのテキストをにリンクしTextBlockTitle入力UserControlのテキストにも同じことをリンクすることだったので、コードビハインドは次のようになります。

public string Title
{
    get { return this.titleTextBlock.Text; }
    set { this.titleTextBlock.Text = value; }
}

public string Text
{
    get { return this.inputTextBox.Text; }
    set { this.inputTextBox.Text = value; }
}

DependencyPropertiesなどは必要ありません。

于 2012-11-08T14:57:48.373 に答える