В настоящее время у меня есть приложение Winforms, которое использует прозрачные эффекты. Однако это является абсолютной болью в преподобном сзади! Winforms, поскольку Im обучение не имеет дело с прозрачностью особенно хорошо.C# Winforms-WPF interop
Мне было интересно, будет ли это проще с использованием компонентов WPF для бит прозрачности и winforms для остальных (обратите внимание, хотя Id Id, чтобы переместить все приложение в WPF, это просто невозможно). Я почти ничего не знаю о WPF, поэтому причина здесь! То, что я рассматривал, было:
1) Принимать компонент WPF в пользовательском элементе Winforms, например. Пример WPF Control:
<UserControl x:Class="WindowsFormsApplication1.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300">
<Grid>
<Rectangle Name="rectangle1" Stroke="White" Fill="Black" RadiusX="10" RadiusY="10" Opacity="0.7" />
<Rectangle Margin="57,101,43,99" Name="dialog" Stroke="Gray" Fill="White" RadiusX="10" RadiusY="10" />
</Grid>
</UserControl>
2) Хост пользовательский элемент управления Winforms (содержание) в пределах белого прямоугольника (диалоговом) элемента управления WPF. 3) разрешить контент (пользовательский контроль Winforms) вызывать код родительского элемента WPF-Control.
Первых вещей первый ...
- Является ли это разумно, что нужно сделать, или я ложное дерево?
- Можно ли это сделать проще?
- Может ли кто-нибудь помочь мне здесь? (Образец кода будет с благодарностью получен!)
- Наконец ... есть ли какие-либо онлайн-ресурсы, которые могут помочь мне а) изучить WPF и b) стать более самодостаточными?
@TK: Прозрачность визуализации, смешанная с WPF и Winforms, является проблемой, и я не знаю, разрешима ли она. WPF и WinForms принципиально отличаются друг от друга, и я помню, где-то читал, что, хотя они могут размещать друг друга, наложенные компоненты не будут отображаться правильно, период. Им нужны разные регионы. Кажется, я читал это в книге Адама Натана, но у меня нет здесь ссылки, поэтому я мог вспомнить неправильно. –
@Greg D: Я считаю, что вы абсолютно правы. Проблема в том, что каждый элемент управления (будь то WPF или Winforms) требует своего собственного воздушного пространства. Это означает, что в любой момент времени пиксель на экране представляет собой пиксель WPF или пиксель Winform и не может быть гибридом двух.Я решил эту проблему, получив компоненты Winforms, чтобы отобразить себя как файл BMP, а затем отобразить файл bmp в качестве фона другого элемента управления. Беспокойно ... да, но кажется, что он работает достаточно хорошо. –
Умный подход. Можете ли вы опубликовать, как вы получили элементы управления winforms для рендеринга в качестве растрового изображения для эффектов смешивания в ответе на ваш вопрос? :) Захватываете ли вы изменения в элементах winforms и соответствующим образом обновляете растровые изображения, или они являются элементами управления winforms, статичными во время эффектов прозрачности? –