(我正在使用WPF和MVVM模式)
首先,我继承了Button控件以创建自己的自定义按钮。这是因为我希望此按钮具有一些附加属性:
public class RangeButton : Button
{
public Rank CardARank { get; set; }
public Rank CardBRank { get; set; }
public bool IsSuited { get; set; }
public string ButtonContent { get; set; }
public RangeButton(int i, int j, bool suited)
{
CardARank = GetRankFromInt(i);
CardBRank = GetRankFromInt(j);
IsSuited = suited;
SetButtonContent();
}
public RangeButton()
{
}
private Rank GetRankFromInt(int x)
{
return (Rank) x;
}
private void SetButtonContent()
{
ButtonContent = StaticGameHelpers.GetRangeSegmentString(CardARank, CardBRank, IsSuited);
}
}
我在视图模型中初始化RangeButton的列表,每个属性都正确设置 - 我最终得到169个RangeButton的列表:
public List<RangeButton> RangeButtons
{
get { return _rangeButtons; }
set
{
_rangeButtons = value;
OnPropertyChanged("RangeButtons");
}
}
这是我的XAML:
<ItemsControl x:Name="itemsControl" ItemsSource="{Binding RangeButtons}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<inheritedControls:RangeButton Width="70" Height="50" Margin="3">
<ContentPresenter Content="{Binding ButtonContent, RelativeSource={RelativeSource Self}}"/>
</inheritedControls:RangeButton>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="13" Rows="13"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
正在显示所有169个按钮,但每个按钮完全空白,没有任何内容。此外,宽度,高度和边距属性被忽略,这使我相信我的xaml存在问题,但我无法弄明白。
我意识到有一些类似的问题是这样问的,但没有人使用自定义继承按钮。任何帮助非常感谢:)
答案 0 :(得分:1)
感谢@dymanoid的一些建议我采取了不同的方法。我从按钮控制理念中删除了整个继承,并简单地创建了一个自定义对象&#39; RangeSegment&#39;这将取代我的RangeButton失败。在我的VM中,我存储了一个RangeSegments列表,并将它们用作ItemsControl的ItemsSource。然后在Datatemplate中为每个项目添加了一个Button,其中content属性绑定了每个RangeSegment中的属性