以下是我一直在玩的对象的代码,用于学习XAML和c#....
它工作得很好,当调用构造函数时,它会在屏幕上绘制一个我希望它去的十六进制多边形。
我试图从它的构造函数中设置多边形填充属性但是我无法让它工作。它没有抛出任何错误,我的多边形只是一直空白。
代码如下,任何人都可以告诉我,我的愚蠢新手错误是什么?下面的一些代码只是为了借口使用/学习它......不是因为它是bext的方式。
<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;
}
}
}
答案 0 :(得分:1)
此绑定不起作用,因为您将类型Fill
的{{1}}绑定到Brush
属性。
当你写:
string
解析器遍历并创建一个{“1}},其中包含”白色“颜色。但是,在通过绑定进行设置时,这不起作用。如果您绑定到<Polygon Fill="White"/>
属性,则应显示颜色。
答案 1 :(得分:0)
我不确定你在这里要做什么,但是在构造函数中你将无法做任何与绑定有关的事情。绑定数据仅在加载控件时可用,因此,您可以订阅控件的Loaded
事件或覆盖OnLoaded
方法并将逻辑放在那里。