カスタム UserControl に次のような DependencyProperty があります。
public static readonly DependencyProperty ColumnWidthProperty =
DependencyProperty.Register("ColumnWidth", typeof(int), typeof(CallBoard),
new PropertyMetadata(150));
public int ColumnWidth {
get { return (int)GetValue(ColumnWidthProperty); }
set { SetValue(ColumnWidthProperty, value); }
}
Expression Blend 3 には、次のようなものがあります。
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="SilverlightTest.CallBoard"
d:DesignWidth="640" d:DesignHeight="480">
<UserControl.Resources>
<DataTemplate x:Key="EmployeeHeaderTemplate">
<TextBlock Text="{Binding Name}" TextAlignment="Center" FontWeight="Bold" FontSize="16"/>
</DataTemplate>
<DataTemplate x:Key="CallListItemTemplate">
<StackPanel >
<TextBlock Text="{Binding CustomerName}" FontWeight="Bold"/>
<TextBlock Text="{Binding Details}"/>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="CallListTemplate">
<ListBox ItemTemplate="{StaticResource CallListItemTemplate}" ItemsSource="{Binding Calls}"/>
</DataTemplate>
</UserControl.Resources>
<StackPanel x:Name="stackPanel" DataContext="{Binding Source={StaticResource DummyDataSource}}">
<ItemsControl ItemsPanel="{StaticResource HorizontalItemsPanelTemplate}" ItemTemplate="{StaticResource EmployeeHeaderTemplate}" ItemsSource="{Binding}"/>
<ItemsControl ItemsPanel="{StaticResource HorizontalItemsPanelTemplate}" ItemTemplate="{StaticResource CallListTemplate}" ItemsSource="{Binding}"/>
</StackPanel>
</UserControl>
ここで、ColumnWidth 依存関係プロパティが、EmployeeHeaderTemplate DataTemplate の TextBlock と CallListTemplate DataTemplate の ListBox の幅を制御するようにします。C# でこれを実行できることはわかっていますが、純粋な XAML データ バインディングでも可能だと感じています。
しかし、Silverlight と Expression Blend 3 は比較的新しいので、どうすればよいかわかりません。助言がありますか?