依存関係プロパティを使用して単純なユーザー コントロールを作成し、それをバインドしようとしましたが、うまくいかないようです。理由はわかりません。コードに直接飛び込みます。コントロールが意味をなさないという事実を無視してください。これは説明目的のためだけです (それが重要な場合は WP8 で記述されています)。
私の単純なユーザー コントロールは、基本的に、それをオフまたはオンにするプロパティを持つ行です。
<Grid x:Name="LayoutRoot" Background="Transparent"> <Line Height="105" Width="105" X2="100" Y2="100" Visibility="{Binding LineVisible}" Stroke="#FFFC1515" StrokeThickness="5"/> </Grid> public partial class SimpleUserControl : UserControl { public SimpleUserControl() { InitializeComponent(); DataContext = this; } public static readonly DependencyProperty LineVisibleProperty = DependencyProperty.Register("LineVisible", typeof(bool), typeof(SimpleUserControl), new PropertyMetadata(new PropertyChangedCallback(OnLineVisibleChanged))); public bool LineVisible { get { return (bool)GetValue(LineVisibleProperty); } set { SetValue(LineVisibleProperty, value); } } private static void OnLineVisibleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { bool newvalue = (bool)e.NewValue; Visibility vis = newvalue ? Visibility.Visible : Visibility.Collapsed; (d as SimpleUserControl).Visibility = vis; } }
テストアプリ
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <uc:SimpleUserControl LineVisible="{Binding class1.Vis}"/> </Grid> public partial class MainPage : PhoneApplicationPage { public Class1 class1 { get; set; } public MainPage() { InitializeComponent(); DataContext = this; } private void PhoneApplicationPage_Loaded_1(object sender, RoutedEventArgs e) { class1 = new Class1() { Vis = false }; } }
バインド先の class1
public class Class1 : INotifyPropertyChanged { private bool _vis; public bool Vis { get { return _vis; } set { _vis = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Vis")); } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string name) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(name)); } } }
動作しないようですが、以下のように明示的に設定すると動作します。
<uc:SimpleUserControl LineVisible="False"/>
私はそれが単純なものだと確信していますが、私はそれを見ていません。助けてくれてありがとう。