Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF-绑定到Integer/Double属性以显示X个矩形_C#_Wpf_Xaml_.net 4.6.2 - Fatal编程技术网

C# WPF-绑定到Integer/Double属性以显示X个矩形

C# WPF-绑定到Integer/Double属性以显示X个矩形,c#,wpf,xaml,.net-4.6.2,C#,Wpf,Xaml,.net 4.6.2,我目前正在尝试设计一个“统计”窗口,它可以在RPG游戏中看到,例如,显示攻击、防御和生命分配的点数 例如,我的类中有属性Life,在我的XAML中,我有一个WrapPanel,我想在这里托管所有这些矩形,它们将表示属性Life所具有的每个点,如果该属性的值为“5”,然后,5个矩形将显示在WrapPanel中 是否可以在XAML中使用数据绑定而不用编写代码? 如果纯粹这样做是不可能的,那么是否可以通过编写转换器来实现呢 如果其中之一是可能的,如何实现 我试图在不在后端编写代码的情况下通过绑定来实现

我目前正在尝试设计一个“统计”窗口,它可以在RPG游戏中看到,例如,显示攻击、防御和生命分配的点数

例如,我的类中有属性Life,在我的XAML中,我有一个
WrapPanel
,我想在这里托管所有这些
矩形,它们将表示属性Life所具有的每个点,如果该属性的值为“5”,然后,5个
矩形
将显示在
WrapPanel

是否可以在XAML中使用数据绑定而不用编写代码? 如果纯粹这样做是不可能的,那么是否可以通过编写转换器来实现呢

如果其中之一是可能的,如何实现

我试图在不在后端编写代码的情况下通过绑定来实现这一点,以尽可能减少代码的臃肿和简单


(5)不是最大值,它可以达到数据类型所能达到的最高值,所以你必须考虑那些矩形必须动态地插入绑定,而不是仅仅插入它们并改变可见性。

< P>首先编写一个转换器,它从给定的编号中生成项目数组:

public class NumberToItemsConverter : IValueConverter {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
        return Enumerable.Range(1, System.Convert.ToInt32(value));
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
        throw new NotImplementedException();
    }
}
然后使用项目控制:

<ItemsControl ItemsSource="{Binding Value, Converter={StaticResource numToItems}}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel IsItemsHost="True" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Rectangle Height="100"
                       Width="20"
                       Margin="5,0,5,0"
                       Fill="Red" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>


为什么要投否决票?如果内容不令人满意,为什么不提供反馈以便我可以改进问题?添加5个矩形,将其可见性绑定到stat值,并在绑定上使用
ValueConverter
,使其在值大于或等于该框的值时可见。您确实意识到,如果这些统计数据超过5,则无法工作,对吗?这就是为什么它首先在一个WrapPanel中,根据有多少自动水平和垂直定位它…创建一个公共只读属性,返回
可枚举的范围(1,X)
,其中X是您的当前统计值。将
ItemsControl
绑定到此项。我认为这对您很有用。您还可以编写一个
IValueConverter
,将整数直接转换为
Enumerable.Range(1,X)
。该转换器将消除viewmodel上的额外属性,并使更新通知更容易。
IsItemsHost
对我来说是新的,MSDN上的文档也没有真正解释为什么需要,您能详细说明该部分吗?。谢谢你给我看一些新的东西。@BradleyUffner在这种情况下,它是不需要的(虽然也没有坏处),我只是使用它,因为我曾经这样做过。当你们把面板放在控制模板本身时,它是需要的(就像你们已经发现的那个样)。谢谢,我知道它就在这附近,但我不太确定怎么做。