0

Silverlight アプリケーションのコントロールを作成しようとしていますが、問題が発生しています。コントロールはツリービューです。アイテムを選択すると、キャンバスのサイズを更新する幅と高さの値を渡す必要があります。基本的にはテンプレートになります。テンプレートを、600 と 600 の幅と高さの値を渡す「大きな正方形」、400*400 の「小さな正方形」、幅に 600、高さに 400 を渡す長方形にしたいとします。等々。これは、キャンバスの幅と高さのプロパティにバインドされます。正方形は「正方形」と呼ばれる親の下にあり、長方形は「長方形」などの下にあります。

XAML でツリービューを作成できますが、高さと幅の値をそれに添付できないため、キャンバスの高さと幅を何にもバインドできません。.cs ファイルでアイテム (親、テンプレート名、高さ、幅) を定義し、それを使用してツリービューを作成することを考えていました。次に、アイテムが選択されると、そのアイテムに関連付けられた値が幅と高さとして、キャンバスの幅と高さに既にバインドされている MainPage.xaml のコントロールに渡されます。

追加する既存のコードはあまりありませんが、この例を機能させることができたとしても、大きな助けになるでしょう。

<sdk:TreeView x:Name="trvTemplate">
        <sdk:TreeViewItem Header="Squares">
              <sdk:TreeViewItem Header="Big Square"/>
              <sdk:TreeViewItem Header="Smaller Square"/>
        </sdk:TreeViewItem>
        <sdk:TreeViewItem Header="Rectangles">
              <sdk:TreeViewItem Header="Big Rectangle"/>
              <sdk:TreeViewItem Header="Small Rectangle"/>
        </sdk:TreeViewItem>
<\sdk:TreeView>

これはツリービューで可能ですか?可能であればどうすればよいですか? 助けてくれてありがとう。

編集:今考えてみると、各テンプレートでイベントハンドラーを簡単に使用できましたが、それを行わずに mvvm アプローチを使用したいと思います。

もしかしてこういうこと?

public class CanvasTemplate
{
    private static List<CanvasTemplate> listTemplates = null;

    public CanvasTemplate(string name, double width, double height)
    {


        new CanvasTemplate("Template 1", 800, 400);
        new CanvasTemplate("Template 2", 600, 600);

        Name = name;
        Width = width;
        Height = height;

    }


    public string Name { get; set; }
    public double Width { get; set; }
    public double Height { get; set; }


}           
4

1 に答える 1

1

これはあなたのxamlです

            <sdk:TreeView.ItemTemplate>
            <DataTemplate>
                <sdk:TreeViewItem Header="{Binding HeaderName}" ItemsSource="{Binding ListTemplates}">
                    <sdk:TreeViewItem.ItemTemplate>
                        <DataTemplate>
                            <sdk:TreeViewItem Header="{Binding Name}"  GotFocus="TreeViewItem_GotFocus"/>
                        </DataTemplate>
                    </sdk:TreeViewItem.ItemTemplate>


                </sdk:TreeViewItem>
            </DataTemplate>
        </sdk:TreeView.ItemTemplate>
        </sdk:TreeView>

クラスは

public class ParentCanvasTemplate
    {
        public ParentCanvasTemplate(string headername)
        {
            if (headername == "Squares")
            {
                HeaderName = headername;
                ListTemplates = new List<CanvasTemplate>();
                CanvasTemplate ct = new CanvasTemplate("Smaller Square", 400, 400);
                ListTemplates.Add(ct);
                ct = new CanvasTemplate("Bigger Square", 800, 800);
                ListTemplates.Add(ct);
            }
            else if (headername == "Rectangles")
            {
                HeaderName = headername;
                ListTemplates = new List<CanvasTemplate>();
                CanvasTemplate ct = new CanvasTemplate("Smaller Rectangle", 600, 400);
                ListTemplates.Add(ct);
                ct = new CanvasTemplate("Bigger Rectangle", 800, 600);
                ListTemplates.Add(ct);
            }
        }
        public string HeaderName { get; set; }
        public List<CanvasTemplate> ListTemplates { get; set; }
    }

    public class CanvasTemplate
    {


        public CanvasTemplate(string name, double width, double height)
        {       

            Name = name;
            Width = width;
            Height = height;

        }


        public string Name { get; set; }
        public double Width { get; set; }
        public double Height { get; set; }


    }  

ツリービューを作成する必要がある場所にこれを追加します

List<ParentCanvasTemplate> lst = new List<ParentCanvasTemplate>();
            ParentCanvasTemplate pct = new ParentCanvasTemplate("Squares");
            lst.Add(pct);
            pct = new ParentCanvasTemplate("Rectangles");
            lst.Add(pct);
            trvTemplate.ItemsSource = lst;

これはあなたが望むものを与えるでしょう

 private void TreeViewItem_GotFocus(object sender, RoutedEventArgs e)
        {
            string test = ((sender as TreeViewItem).DataContext as CanvasTemplate).Name;
            string Width = ((sender as TreeViewItem).DataContext as CanvasTemplate).Width+"";

        }
于 2012-08-21T13:44:03.423 に答える