gpt4 book ai didi

c# - 如何设计一个 WPF 依赖属性来支持图像路径?

转载 作者:太空狗 更新时间:2023-10-30 00:58:58 25 4
gpt4 key购买 nike

为了描述我的问题,我创建了一个小应用程序。首先是用户控件:

<UserControl x:Class="WpfApplication10.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="This" DataContext="{Binding ElementName=This}"
>
<Image Source="{Binding Path=MyImageSource}" ></Image>
</UserControl>

第二个 TestApp:

<Window x:Class="WpfApplication10.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:WpfApplication10="clr-namespace:WpfApplication10"
Title="Window1" Height="300" Width="300">
<WpfApplication10:UserControl1
MyImageSource="c:\test.png" >
</WpfApplication10:UserControl1>
</Window>

第三个用户控件背后的代码

using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Imaging;
namespace WpfApplication10
{
public partial class UserControl1 : UserControl
{
public static readonly DependencyProperty MyImageSourceProperty =
DependencyProperty.Register("MyImageSource",
typeof(BitmapImage),typeof(UserControl1),
new FrameworkPropertyMetadata((BitmapImage)new BitmapImage(),
FrameworkPropertyMetadataOptions.None
));

public BitmapImage MyImageSource
{
get { return (BitmapImage)GetValue(MyImageSourceProperty); }
set { SetValue(MyImageSourceProperty, value); }
}


public UserControl1()
{
InitializeComponent();
}
}
}

我知道 Type BitMapImage(DP 的)不能以这种方式工作,但我想知道如何以干净、省类型的方式实现此功能。我想达到与原始 Image.Source 实现相同的行为。

提前致谢,斯科特

最佳答案

在您的控件中,将您的图片命名为:

<Image x:Name="someImage" Source="{Binding Path=MyImageSource}" ></Image>

将您的依赖属性实现为 Uri:

public static readonly DependencyProperty MyImageSourceProperty =
DependencyProperty.Register("MyImageSource",
typeof(Uri),typeof(UserControl1),
new FrameworkPropertyMetadata(new PropertyChangedCallback(OnImageSourceChanged)));

在 OnImageSourceChanged 中:

private static void OnImageSourceChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
UserControl1 userControl = (UserControl1)sender;

userControl.someImage.Source = new BitmapImage((Uri) e.NewValue);
}

这样,您可以为依赖属性提供一个字符串路径,该路径将自动转换为 Uri。

编辑:在 Image 中,source 属性被实现为 ImageSource 而不是 Uri(一个抽象类,您的实现,即 BitmapSource,也从中派生)。它还实现了一个 OnSourceChanged 事件,就像我为 Uri 实现的一样。结论是,如果要设置图像的来源,则必须使用更改事件。

关于c# - 如何设计一个 WPF 依赖属性来支持图像路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1715046/

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