私のクラス 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.
どうすれば目標を達成できますか? よろしくお願いします。