2

私のクラス IFrame には、他の IFrame を含めることができます。

public interface IFrame
{
    int Id { get; }
    string Summary { get; }

    BindableCollection<IFrame> SubFrames { get; set; }
}

IFrame を表示するために、カスタム UserControl があります。

<UserControl x:Class="Views.FrameView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:Views="clr-namespace:Views"
         mc:Ignorable="d" 
         x:Name="FrameXName">
    <StackPanel Orientation="Horizontal">
        <Label Content="{Binding ElementName=FrameXName, Path=Id}" Width="50"/>
    </StackPanel>
</UserControl>

コードビハインドを使用:

public partial class FrameView : UserControl
{
    public FrameView()
    {
        InitializeComponent();
    }

    public static DependencyProperty IdProperty = DependencyProperty.Register(
        "Id", typeof(int), typeof(FrameView));

    public int Id
    {
        get { return (int) GetValue(IdProperty); }
        set { SetValue(IdProperty, value); }
    }
}

したがって、次を使用して FooView.xaml に Frame を表示できます <Views:FrameView x:Name="Frame1" Width="50" Height="50"/>public IFrame Frame1 { get { return Frames.ElementAt(1); } }

私の目標:

コレクション内のすべての IFrame に対して FrameView を表示したいと考えています。次に例を示します。

<ItemsControl ItemsSource="{Binding Frames}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Views:FrameView x:Name="{Binding}" Width="50" Height="50"/>
                    </StackPanel>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
</ItemsControl>

どこpublic BindableCollection<IFrame> Framesで定義されています。

残念ながら、これは機能しません、とコンパイラは言いますMarkupExtensions are not allowed for Uid or Name property values, so '{Binding}' is not valid.

どうすれば目標を達成できますか? よろしくお願いします。

4

1 に答える 1

0

データテンプレートで置き換えることができます

<Views:FrameView x:Name="{Binding}" Width="50" Height="50" />

<Views:FrameView Id="{Binding Path=Id}" Width="50" Height="50" />

うまくいくはずです

于 2012-07-04T22:05:50.267 に答える