Я создаю растровые изображения в коде и хочу отобразить их в графическом интерфейсе. Но <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(...)
.
Image
должен быть свойством зависимости, поэтому он будет уведомлять привязку в XAML при изменении своего значения, чтобы привязка знала, когда обновлять целевое свойство. Обратите внимание, чтоDataContext = this
относительно безвреден для Window, как здесь, но плохая практика в UserControls, потому что он нарушит любые другие привязки. Так что лучше выработать привычку использовать вместо этого привязки RelativeSource. - person 15ee8f99-57ff-4f92-890c-b56153   schedule 09.05.2019Image
находится в ViewModel с NotifyPropertyChanged. Регистрируете свойство зависимости в ViewModel? - person Bergi9   schedule 09.05.2019