簡體   English   中英

XAML屬性綁定混亂

[英]XAML property binding confusion

下面是我一直在學習XAML和c#...的對象的代碼。

它在大多數情況下都可以正常工作,當調用構造函數時,它會在屏幕上我想要的位置繪制一個十六進制的多邊形。

我試圖從它的構造器設置多邊形填充屬性,但是我無法使其正常工作。 它不會引發任何錯誤,我的多邊形只是頑固地保持空白。

代碼在下面,有人可以告訴我我的愚蠢新手錯誤是什么嗎? 下面的一些代碼只是作為使用/學習它的借口....並不是因為這是下一步。

<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;
        }
    }
}

此綁定將不起作用,因為您將類型為Brush Fill綁定到string屬性。

當你寫:

<Polygon Fill="White"/>

解析器遍歷並創建其中帶有“白色”顏色的SolidColorBrush 但是,通過綁定設置時,這不起作用。 如果改為綁定到Brush屬性,則應顯示顏色。

我不確定您要在這里做什么,但是在構造函數中您將無法做任何與綁定有關的事情。 綁定數據僅在控件加載后才可用,因此,您也可以訂閱控件的Loaded事件或重寫OnLoaded方法,然后將邏輯放在此處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM