首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XAML属性绑定混淆

XAML属性绑定混淆
EN

Stack Overflow用户
提问于 2014-07-11 22:52:57
回答 2查看 69关注 0票数 1

下面是我学习XAML和c#时使用的一个对象的代码。

它工作得很好,当构造函数被调用时,它会在屏幕上我想要的地方绘制一个十六进制多边形。

我试图从它的构造器设置多边形填充属性,但是我就是不能让它工作。它不会抛出任何错误,我的多边形只是顽固地保持空白。

代码如下,谁能告诉我我愚蠢的新手错误是什么?下面的一些代码只是一个使用/学习它的借口。不是因为这是最好的选择。

代码语言:javascript
复制
<UserControl Name="Hex"
             x:Class="HexControl.HexControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" RenderTransformOrigin="0,0" Horizontal Alignment="Left" VerticalAlignment="Top">

    <Grid RenderTransformOrigin="0,0" HorizontalAlignment="Left" VerticalAlignment="Top">
        <Polygon Name="theHex" Stroke="Black" MouseDown="Polygon_MouseDown" Focusable="True" Fill="{Binding Path=sHexColour}">
            <Polygon.Points>
                <Point>40,30</Point>
                <Point>20,40</Point>
                <Point>0,30</Point>
                <Point>0,10</Point>
                <Point>20,0</Point>
                <Point>40,10</Point>
            </Polygon.Points>

        </Polygon>
    </Grid>
</UserControl>

namespace HexControl
{

    public enum Terrain { Clear, Hills, Mountain, Forest, Swamp, Sea };

    /// <summary>
    /// Interaction logic for UserControl1.xaml
    /// </summary>
    public partial class HexControl1 : UserControl
    {
        private string hexID;
        private Terrain hexTerrain;
        private string sHexColour;
        private string[] sColours = {"#FF90EE90", "#FFF4A460", "#FF808080", "#FF006400", "#FF808000", "#FF3CB371"};

        public string sHexID 
        {
            get { return hexID;}
            set { hexID = sHexID; } 
        }

        public Terrain terrain
        {
            get { return hexTerrain; }
            set 
            { 
                hexTerrain = terrain;
                sHexColour = sColours[(int)terrain];
            }
        }


        public HexControl1(string sStartHexID, Terrain startTerrain)
        {
            InitializeComponent();
            hexID = sStartHexID;
            hexTerrain = startTerrain;
            sHexColour = sColours[(int)startTerrain];
            //BindingExpression be = theHex.GetBindingExpression(Polygon.FillProperty);
            //be.UpdateSource();
        }

        private void Polygon_MouseDown(object sender, MouseButtonEventArgs e)
        {
            MessageBoxResult result = MessageBox.Show("Hex Was " + hexID);
            e.Handled = true;
        }
    }
}
EN

回答 2

Stack Overflow用户

发布于 2014-07-11 23:38:10

这个绑定不会起作用,因为您正在将Brush类型的Fill绑定到string属性。

当你写的时候:

代码语言:javascript
复制
<Polygon Fill="White"/>

解析器遍历并创建一个带有“白色”颜色的SolidColorBrush。但是,当通过绑定进行设置时,这不起作用。如果改为绑定到Brush属性,则应显示您的颜色。

票数 1
EN

Stack Overflow用户

发布于 2014-07-11 22:58:56

我不确定您在这里要做什么,但在构造函数中,您将无法执行任何与绑定有关的操作。绑定数据仅在控件加载后才可用,因此,您也可以订阅控件的Loaded事件或覆盖OnLoaded方法并将逻辑放在其中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24700621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档