0

問題は、DependencyProperty が XAML で指定された値に割り当てられていないことです。

UserControl1 と UserControl2 という 2 つの異なるユーザー コントロールがあり、両方のコントロールに共通する別のユーザー コントロールを定義します。

UserControl1.xaml:

<modulename:MyUserControl ....somecode... DataOrientation="Horizontal"> 
</modulename:MyUserControl>

UserControl2.xaml

<modulename:MyUserControl ....somecode... DataOrientation="Vertical"> 
</modulename:MyUserControl>

両方の UserControl の違いは、UserControl1 は水平方向を使用してデータを表示する必要があり、UserControl2 は垂直方向を使用してデータを表示する必要があることです。

MyUserControl のコード ビハインド内で、依存関係プロパティを次のように定義しました。

public static readonly DependencyProperty DataOrientationProperty = 
DependencyProperty.Register ("DataOrientation",typeof(String),typeof(MyUserControl));

public String DataOrientation 
{
   get {return (String)GetValue(DataOrientationProperty);}
   set { SetValue(DataOrientationProperty, value); }
}

これらは、MyUserControl.xaml 内のコードの一部です。

...
<StockPanel>
  <Grid Name="MyGrid" SizeChanged="MyGrid_SizeChanged">
    <Grid.ColumnDefinitions>
      <ColumnDefinitions Width="*"/>
      <ColumnDefinitions Width="100"/>
    </Grid.ColumnDefinitions>

    <ScrollViewer Name="MySV" Grid.Column="0" ....>
      <Grid Name="DetailGrid"/>
    </ScrollViewer>

    <Grid Grid.Column="1" .........>
    ......Some Option Data....
   </Grid>
  </Grid>
 </StockPanel>

アイデアは、方向フラグに応じて、ColumnDefinitions を RowDefinitions に、Grid.Column を Grid.Rows に変更することです。

フラグが "Horizo​​ntal" の場合、UserControl は "DetailsGrid" と "Option Data" グリッドを並べて表示します。つまり、"DetailGrid" は列 0 に、"Option Data" グリッドは列 1 に表示されます。

フラグが「垂直」の場合、UserControl は行 1 に「DetailGrid」を表示し、行 0 に「オプション データ」を表示します。

その問題について助けが必要です。

前もって感謝します。

4

1 に答える 1

1

依存関係プロパティのハンドラーを変更し、値が実際にユーザー コントロールに渡されていることをデバッガーで確認します。ユーザーコントロールのデフォルト値も設定します(以下では「水平」を使用します)が、それを処理する方法を決定します。

public string DataOrientation
   {
       get { return (string)GetValue(DataOrientationProperty); }
       set { SetValue(DataOrientationProperty, value); }
   }

   /// <summary>
   /// Identifies the DataOrientation dependency property.
   /// </summary>
   public static readonly DependencyProperty DataOrientationProperty =
       DependencyProperty.Register(
           "DataOrientation",
           typeof(string),
           typeof(MyClass),
           new PropertyMetadata("Horizontal",  // Default to Horizontal; Can use string.Empty
                                 OnDataOrientationPropertyChanged));

   /// <summary>
   /// DataOrientationProperty property changed handler.
   /// </summary>
   /// <param name="d">MyClass that changed its DataOrientation.</param>
   /// <param name="e">Event arguments.</param>
   private static void OnDataOrientationPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
   {
       MyClass source = d as MyClass;  // Put breakpoint here.
       string value = (string)e.NewValue;
   }
于 2012-11-08T19:01:41.757 に答える