gpt4 book ai didi

c# - silverlight 中的动态图像源绑定(bind)

转载 作者:行者123 更新时间:2023-11-30 22:42:49 24 4
gpt4 key购买 nike

我想根据 ChildWindow 中的 DataContext 设置图像的来源。这是 XAML 文件:

<controls:ChildWindow x:Class="CEM.Controls.DialogWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" Title="{Binding Title}">
...
<Image x:Name="DialogIcon"></Image>
...
</controls:ChildWindow>

如果我覆盖 ChildWindowShow 方法并设置图像的来源,它工作正常:

public new void Show()
{
DialogIcon.Source = new BitmapImage(new Uri(@"/Images/DialogWindow/Confirm.png", UriKind.Relative));
base.Show();
}

但它看起来很丑而且不是“silverlight方式”,所以我决定改变:

<Image x:Name="DialogIcon" Source="{Binding DialogIconType, Converter={StaticResource DialogIconConverter}}"></Image>

你看我注册了一个 DialogIconConverter 来绑定(bind)来自 DataContext 的源。

public class DialogIconConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
//currently it's an hard-coded path
return new BitmapImage(new Uri(@"/Images/DialogWindow/Confirm.png", UriKind.Relative));
}
...
}

但它现在不工作了,我在这个控件中还有其他几个工作正常的转换器。只有这个不起作用。你能帮忙找出问题所在吗?

编辑:DialogIconType 是一个枚举,也是DialogContext 的一个属性。 DialogContext 的实例将分配给 DialogWindowDataContext 属性。

public enum DialogIconType
{
Confirm,
Alert,
Error
}
public class DialogContext
{
public string Title { get; set; }
public string Content { get; set; }
public DialogButtons Buttons { get; set; }
public DialogIconType IconType { get; set; }
}
internal DialogWindow(DialogContext context)
{
InitializeComponent();
this.DataContext = context;
}

最佳答案

可能很愚蠢,但您是否确保在您的 xaml 文件中正确引用了您的转换器?

否则,我建议尝试使用此语法作为 URI 的路径(将图像设置为资源):

return new BitmapImage(new Uri("pack://application:,,,/Images/DialogWindow/Confirm.png", UriKind.Relative));

编辑:

好的,我想我明白了:查看您的输出窗口,您可能会看到一些错误 40 绑定(bind) ... blablabla ...

我的猜测是转换器是正确的,但绑定(bind)的源不正确,所以基本上甚至没有使用转换器。

原因是您的 DialogIconType 不是依赖属性,因此无法绑定(bind)。

换句话说,这:

public DialogIconType IconType { get; set; }

应该变成这样:

public static DependencyProperty IconTypeProperty = DependencyProperty.Register("IconType", typeof(DialogIconType), typeof(DialogContext));
public DialogIconType IconType
{
get { return (DialogIconType)(GetValue(IconTypeProperty)); }
set { SetValue(IconTypeProperty , value); }
}

此外,在您的 Xaml 中,您应该绑定(bind)到“IconType”,而不是“DialogIconType”(它是一种类型而不是属性)

(这甚至可能是唯一的问题,因为我不确定这里是否真的需要 dependencyProperty,现在我想到了)

关于c# - silverlight 中的动态图像源绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4213470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com