1

私にはそのようなタスクがあります-2つのコントロール(WPFToolkitのDataGridと標準ツールバー)を結合するコントロールを作成します。大規模な場合、それがどのように結合を制御するかは問題ではありません。必要なものを構築するために使用できる一般的な方法を見つける必要があります。一見すると、ユーザーコントロールのようなもの、つまりコントロールの構成が必要です。これを全体として実装して、再利用できます。ただし、私のタスクでは、XAMLで複合コントロールを調整する可能性が必要です。したがって、ツールバーとDataGridを作成する場合は、両方のプロパティとイベントを公開する必要があります。したがって、XAMLで、たとえば、データグリッドの列とツールバーのバーの両方を設定できます。

(loacalパーサーが何らかの理由でスペースを入力しなかったため、タグ名に意図的にスペースを入れました)

<MyDataGridToolBarControl>
<DataGrid>
        <DataGrid.Columns>
            <DataGridTextColumn Header="firstColumn">
            </DataGridTextColumn>
            <DataGridTextColumn Header="secondColumn"/>
        </DataGrid.Columns>
</DataGrid>
<ToolBar Background="{x:Null}"> 
        <Button ToolTip="New">
            <Image Source="New.png"/>
        </Button>
        <Button ToolTip="Save">
            <Image Source="Save.png"/>
        </Button>
        <Button ToolTip="Delete">
            <Image Source="Delete.png"/>
        </Button>               
</ToolBar>
</MyDataGridToolBarControl>

今のところ私に適していない唯一の決定は、カスタムコントロールをDataridから継承し(DataGridはこのペアでより重要であるため)、datagridとツールバーの両方を含むテンプレートを再定義することです。これにより、データグリッドのすべての機能が得られますが、ツールバー部分を取得する場合は、コードを介して実行する必要があります。つまり、プログラムでアクセスを取得するなど、仮想および論理ツリーで検索する必要があります。これは、かなりの決定ではありません。初心者がこのタスクを解決するのを手伝ってください)よろしくお願いします...

4

1 に答える 1

1

外部のユーザーが Xaml を介してグリッドのすべてのプロパティとツールバーのすべてのプロパティにアクセスできるようにするだけの場合は、コンポジションを使用して、ユーザー コントロールを作成し、次のように 2 つのコントロールを公開できます。

<UserControl>

    <StackPanel>
        <ToolBar x:Name="ToolBar" x:FieldModifier="Public" />
        <DataGrid x:Name="Grid" x:FieldModifier="Public" />         
    </StackPanel>

<UserControl>

このアプローチの問題点は、グリッドとツールバーがユーザー コントロールであるため、ユーザーがグリッドとツールバーのレイアウトをオーバーライドできないことです。ただし、ツールバーとグリッドのテンプレートとスタイルを完全にオーバーライドできます。

少し良い方法は、カスタム コントロールを作成することです (ここでもコンポジションを使用します)。次のように、テンプレートにグリッドとツールバーを指定できます。

<ControlTemplate>
        <StackPanel>
            <ToolBar x:Name="PART_ToolBar" />
            <DataGrid x:Name="PART_Grid" />         
        </StackPanel>
</ControlTemplate>

[TemplatePart("PART_ToolBar", typeof(ToolBar))]
[TemplatePart("PART_Grid", typeof(DataGrid))]
public class MyCustomControl : Control
{
    private ToolBar _ToolBar;
    public ToolBar ToolBar {get{return _ToolBar;}}

    private DataGrid _Grid;
    public DataGrid Grid {get{return _Grid;}}

    protected overrides OnApplyTemplate()
    {
         _ToolBar = this.Template.FindName("PART_ToolBar", this) as ToolBar;
         _Grid = this.Template.FindName("PART_Grid", this) as DataGrid;
    }
}
于 2009-03-30T20:35:11.813 に答える