0

WPF でダイアログ クラスを作成しようとしています。Windowこのクラスは、いくつかのデフォルトのボタンと設定を継承して提供します。

実装は基本的に次のようになります。

namespace Commons {
  public class Dialog : Window {
    public new UIElement Content {
      get { return this.m_mainContent.Child; }
      set { this.m_mainContent.Child = value; }
    }

    // The dialog's content goes into this element.
    private readonly Decorator m_mainContent = new Decorator();
    // Some other controls beside "m_mainContent".
    private readonly StackPanel m_buttonPanel = new StackPanel();

    public Dialog() {
      DockPanel content = new DockPanel();

      DockPanel.SetDock(this.m_buttonPanel, Dock.Bottom);
      content.Children.Add(this.m_buttonPanel);

      content.Children.Add(this.m_mainContent);

      base.Content = content;
    }

    public void AddButton(Button button) {
      ...
    }
  }
}

ご覧のとおり、Contentプロパティを再定義しました。

今度は、このダイアログ クラスを XAML で次のように使用できるようにしたいと考えています。

<my:Dialog x:Class="MyDialogTest.TestDialog"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:my="clr-namespace:Commons;assembly=Commons"
        Title="Outline" Height="800" Width="800">
  <!-- Dialog contents here -->
</my:Dialog>

ただし、これはWindow.Contentではなくダイアログの内容を設定するときに使用されますDialog.Content。どうすればこれを機能させることができますか?

4

1 に答える 1

1

ダイアログのXAML「コンテンツ」によって記述された子要素がベースウィンドウの「コンテンツ」プロパティではなく、「コンテンツプロパティ」として配置されるように、「your」クラスのプロパティを「コンテンツプロパティ」として指定する必要がある場合があります。 。

[ContentProperty("Content")]
public class Dialog : Window {

それでも問題が解決しない場合は、名前を変更してみてください。

[ContentProperty("DialogContent")]
public class Dialog : Window {

public new UIElement DialogContent {
      get { return this.m_mainContent.Child; }
      set { this.m_mainContent.Child = value; }
    }
于 2012-09-13T11:14:35.930 に答える