我正在代码中生成位图,并希望在GUI上显示它。但是<ImageBrush>
并未将其显示为BitmapSource/ImageSource
。就像3D部分中的不可见图像一样。
在<Image>
(不是3D零件)上,它显示为所需。
我还尝试在后面的代码中创建DiffuseMaterial
和ImageBrush
并将它们直接绑定为<h:RectangleVisual3D>
到Material
中。
并尝试在<VisualBrush>
中使用<ImageBrush>
而不是<Image>
作为XAML的子级。
以下代码重现了我的情况:
MainWindow.xaml
<Window x:Class="WPF3DTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WPF3DTest"
xmlns:h="http://helix-toolkit.org/wpf"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<h:HelixViewport3D Grid.Row="0">
<h:DefaultLights />
<h:RectangleVisual3D Length="100" Width="100">
<h:RectangleVisual3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<ImageBrush Opacity="1" ImageSource="{Binding Image}" />
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</h:RectangleVisual3D.Material>
</h:RectangleVisual3D>
</h:HelixViewport3D>
<Image Grid.Row="1" Source="{Binding Image}" />
</Grid>
</Window>
MainWindow.xaml.cs
namespace WPF3DTest
{
public partial class MainWindow : Window
{
public ImageSource Image { get; set; }
public MainWindow()
{
InitializeComponent();
DataContext = this;
Image = new BitmapImage(new Uri("C:\\TypenschildDirectory\\Graphic\\laufrichtung2.png"));
Image.Freeze();
}
}
}
new BitmapImage(new Uri(...))
是我的测试。但是出于我的目的,它是通过使用Imaging.CreateBitmapSourceFromHBitmap(...)
生成位图的。
答案 0 :(得分:-2)
我不确定这是否是正确的答案,但是它解决了我的问题。
提供“ DataProxy” /“ BindingProxy”解决了<ImageBrush>
的绑定。
据此链接https://thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/我了解到,<ImageBrush>
没有继承DataContext。
<h:HelixViewport3D.Resources>
<wpf:BindingProxy x:Key="ImageProxy" Data="{Binding Image}" />
</h:HelixViewport3D.Resources>
...
<ImageBrush Opacity="1" ImageSource="{Binding Data, Source={StaticResource ImageProxy}}" />