尝试绑定Image Source时遇到了一些问题。我正在创建一个棋盘游戏,您可以选择一个玩家来查看其属性(包括他的图像)。电路板上的字段也有图像作为背景。
我为字段创建的模板:
<ControlTemplate x:Key="fieldButtonTemplate" x:Name="fieldButtonTemplateName" TargetType="{x:Type Button}">
<Grid x:Name="fieldGrid" Visibility="Visible">
<Grid.LayoutTransform>
<RotateTransform Angle="{Binding ImageRotate}" />
</Grid.LayoutTransform>
<Grid.Background>
<ImageBrush ImageSource="{Binding Path=ImageSource}"/>
</Grid.Background>
<Grid.RowDefinitions>
....
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
...
</Grid.ColumnDefinitions>
</Grid>
</ControlTemplate>
用于查看玩家属性的那个:
<Image Source="{Binding Path=CurrentlySelected.ImageSource}" Grid.Column="0" Grid.Row="0"
Grid.ColumnSpan="2" Stretch="Fill" />
<StackPanel x:Name="CurrentPlayerStackPanel" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2">
<TextBlock Text="{Binding Path=CurrentlySelected.Name}" TextWrapping="Wrap"
FontFamily="Magneto" FontSize="20" Foreground="BlanchedAlmond"/>
<TextBlock Text="{Binding Path=CurrentlySelected.Character}" TextWrapping="Wrap"
FontFamily="Magneto" FontSize="20" Foreground="BlanchedAlmond"/>
<TextBlock Text="{Binding Path=CurrentlySelected.Money}" TextWrapping="Wrap"
FontFamily="Magneto" FontSize="20" Foreground="BlanchedAlmond"/>
</StackPanel>
问题是图像仅在选择播放器时显示,并且不显示为网格的背景。 我为玩家和领域创建了一个界面:
interface IVisualObject
{
int ImageRotate { get; set; }
string ImageSource { get; set; }
}
图像是资源,构建操作设置为内容,复制到输出目录设置为复制(如果较新)。我试图作为图像源传递的字符串就像
&#34;包:// siteoforigin:,,, /资源/ picture.jpg&#34;
btw ImageRotate绑定得很好。 提前谢谢!
编辑: 如果我把它设置为
<Grid.Background>
<ImageBrush ImageSource="pack://siteoforigin:,,,/Resources/picture.jpg"/>
</Grid.Background>
它有效。
答案 0 :(得分:1)
我可以看到你尝试将ImageBrush.ImageSource绑定到资源。
我在Cannot set ImageSource using pack URI的stackoverflow回答中找到了,我认为这是你的情况。
请注意接下来的回答:
...请注意,如果将图像添加到Resource.resx,Visual Studio将为每个图像生成一个包含静态属性的Resources类。 这些属性的类型为System.Drawing.Bitmap,即WinForms, 不是WPF
已更新:您还可以使用转换器更准确地检索资源。
public class StringToImageSource: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
string resourceName = value.ToString();
var img = new BitmapImage();
img.UriSource = new Uri("Resources/" + resourceName);
return img;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
答案 1 :(得分:1)
使您的属性成为ImageSource而不是字符串,或使用此答案中提到的转换器:Binding image source through property in wpf。当您对字符串进行硬编码时,xaml编译器正在为您执行此操作,这就是为什么这样做。