项目控件中的自定义继承按钮,未设置内容

时间:2017-07-07 08:53:52

标签: c# wpf xaml mvvm

(我正在使用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存在问题,但我无法弄明白。

我意识到有一些类似的问题是这样问的,但没有人使用自定义继承按钮。任何帮助非常感谢:)

1 个答案:

答案 0 :(得分:1)

感谢@dymanoid的一些建议我采取了不同的方法。我从按钮控制理念中删除了整个继承,并简单地创建了一个自定义对象&#39; RangeSegment&#39;这将取代我的RangeButton失败。在我的VM中,我存储了一个RangeSegments列表,并将它们用作ItemsControl的ItemsSource。然后在Datatemplate中为每个项目添加了一个Button,其中content属性绑定了每个RangeSegment中的属性