绑定 ControlTemplate 的按钮内容和命令参数 属性
Binding a ControlTemplate's Button's Content and Command Parameter Property
好的,这可能是一件非常简单的事情,但我做得不太好。我刚刚学习如何使用 ItemsControl 动态添加项目,如下所示。
<ItemsControl ItemsSource="{Binding Buttons}">
<ItemsControl.Template>
<ControlTemplate>
<Button FontWeight="Bold" Command="{Binding SelectMaterialCommand}" CommandParameter="{Binding CommandParameter}" Width="50" Height="50" Style="{StaticResource RoundedButtonStyle}" Margin="0,0,0,0" Click="Button_Click_2" Content="{Binding .Content}"></Button>
</ControlTemplate>
</ItemsControl.Template>
</ItemsControl>
ItemsControl ItemsSource 属性 绑定到按钮的 ObservableCollection。在代码中,我可以创建一个按钮,设置 Content 和 CommandParameter 属性并将其添加到 ObservableCollection。当我 运行 应用程序填充了一个按钮时,但我无法正确绑定 Content 和 CommandParameter 属性。
我尝试了几种不同的方法,例如Binding Path=.
、Binding Path=Content
、Binding Path=.Content
...等,但似乎没有任何效果。任何帮助将不胜感激。
按照 Subramaniam B 的建议,我通过使用位于我的 UserControl.Resources 部分中所示的数据模板来实现这一点。
<DataTemplate x:Key="temp" DataType="{x:Type local:ButtonModel}">
<telerik:RadButton FontWeight="Bold" FontSize="16" Command="{Binding ButtonCommand}" CommandParameter="{Binding Path=Content}" Width="100" Height="75" Margin="0,0,0,0" MouseLeftButtonUp="Button_Click_2" Content="{Binding Path=Content}">
<telerik:RadButton.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="GhostWhite" Offset="0"/>
<GradientStop Color="Gray" Offset="0.5"/>
<GradientStop Color="Gray" Offset="0.5"/>
<GradientStop Color="GhostWhite" Offset="1"/>
</LinearGradientBrush>
</telerik:RadButton.Background>
</telerik:RadButton>
</DataTemplate>
这里是使用模板的地方:
<telerik:RadCarousel Loaded="MaterialCar_Loaded" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" x:Name="MaterialCar" Height="200" Background="Blue" ItemTemplate="{StaticResource temp}" ItemsSource="{Binding Buttons}" Margin="0,0,0,0"/>
在您的示例中,您将整个 ItemsControl(又名:按钮列表)的模板设置为 A 按钮。
无论 Buttons 集合中有什么项目,此控件都将呈现为单个按钮。相反,您需要单独保留控件本身的模板,并为列表中的项目使用 I 模板。
<ItemsControl ItemsSource="{Binding Buttons}">
<!-- ItemsControl.Template becomes ItemsControl.ItemTemplate below -->
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button FontWeight="Bold" Command="{Binding SelectMaterialCommand}" CommandParameter="{Binding CommandParameter}" Width="50" Height="50" Style="{StaticResource RoundedButtonStyle}" Margin="0,0,0,0" Click="Button_Click_2" Content="{Binding .Content}"></Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
好的,这可能是一件非常简单的事情,但我做得不太好。我刚刚学习如何使用 ItemsControl 动态添加项目,如下所示。
<ItemsControl ItemsSource="{Binding Buttons}">
<ItemsControl.Template>
<ControlTemplate>
<Button FontWeight="Bold" Command="{Binding SelectMaterialCommand}" CommandParameter="{Binding CommandParameter}" Width="50" Height="50" Style="{StaticResource RoundedButtonStyle}" Margin="0,0,0,0" Click="Button_Click_2" Content="{Binding .Content}"></Button>
</ControlTemplate>
</ItemsControl.Template>
</ItemsControl>
ItemsControl ItemsSource 属性 绑定到按钮的 ObservableCollection。在代码中,我可以创建一个按钮,设置 Content 和 CommandParameter 属性并将其添加到 ObservableCollection。当我 运行 应用程序填充了一个按钮时,但我无法正确绑定 Content 和 CommandParameter 属性。
我尝试了几种不同的方法,例如Binding Path=.
、Binding Path=Content
、Binding Path=.Content
...等,但似乎没有任何效果。任何帮助将不胜感激。
按照 Subramaniam B 的建议,我通过使用位于我的 UserControl.Resources 部分中所示的数据模板来实现这一点。
<DataTemplate x:Key="temp" DataType="{x:Type local:ButtonModel}">
<telerik:RadButton FontWeight="Bold" FontSize="16" Command="{Binding ButtonCommand}" CommandParameter="{Binding Path=Content}" Width="100" Height="75" Margin="0,0,0,0" MouseLeftButtonUp="Button_Click_2" Content="{Binding Path=Content}">
<telerik:RadButton.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="GhostWhite" Offset="0"/>
<GradientStop Color="Gray" Offset="0.5"/>
<GradientStop Color="Gray" Offset="0.5"/>
<GradientStop Color="GhostWhite" Offset="1"/>
</LinearGradientBrush>
</telerik:RadButton.Background>
</telerik:RadButton>
</DataTemplate>
这里是使用模板的地方:
<telerik:RadCarousel Loaded="MaterialCar_Loaded" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" x:Name="MaterialCar" Height="200" Background="Blue" ItemTemplate="{StaticResource temp}" ItemsSource="{Binding Buttons}" Margin="0,0,0,0"/>
在您的示例中,您将整个 ItemsControl(又名:按钮列表)的模板设置为 A 按钮。
无论 Buttons 集合中有什么项目,此控件都将呈现为单个按钮。相反,您需要单独保留控件本身的模板,并为列表中的项目使用 I 模板。
<ItemsControl ItemsSource="{Binding Buttons}">
<!-- ItemsControl.Template becomes ItemsControl.ItemTemplate below -->
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button FontWeight="Bold" Command="{Binding SelectMaterialCommand}" CommandParameter="{Binding CommandParameter}" Width="50" Height="50" Style="{StaticResource RoundedButtonStyle}" Margin="0,0,0,0" Click="Button_Click_2" Content="{Binding .Content}"></Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>