WPF Попытка создать библиотеку с пользовательским элементом управления окном, но я получаю сообщение об ошибке: не удается изменить AllowsTransparency после показа окна - PullRequest
0 голосов
/ 01 октября 2018

Я хочу создать настраиваемый шаблон элемента управления (в библиотеке / отдельной сборке) и запустить диалоговое окно / окно сообщений на основе этого шаблона настраиваемого элемента управления, не требуя отдельного клиентского XAML на основе этого шаблона настраиваемого элемента управления.

Шаблон управления разработан следующим образом ...

Класс шаблона управления

public class DialogWindow : Window
{
    #region Constructors
    static DialogWindow()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(DialogWindow),
            new FrameworkPropertyMetadata(typeof(DialogWindow)));
    }

    public DialogWindow()
    {
    }

    public DialogWindow(string title, string header, string message)
    {
        Title = title;
        HeaderText = header;
        MessageText = message;
    }
        ///...
        ///the rest of the custom control class
        ///...

Стиль шаблона управления

    <Style TargetType="{x:Type customcontrols:DialogWindow}">

        <Setter Property="WindowStyle" Value="None" />
        <Setter Property="AllowsTransparency" Value="True" />
        <Setter Property="ResizeMode" Value="NoResize"/>
        ...
        <!-- the rest of the control template-->
        ...
    </Style>

в клиентском приложении, я хочу использовать шаблон управления как.Очень похоже на объявление типа MessageBox, но полностью разработано с нуля.

Код клиента

        CustomControls.DialogWindow custom = new CustomControls.DialogWindow("Sample Title", "Sample Header", 
            Properties.Resources.DocumentResourceSample);
        custom.IsOKEnabled = true;
        custom.OKButtonClick += CloseDialog;
        custom.ShowDialog();

Полная ошибка, которую я получаю при попытке запустить диалоговое окно:

Ошибка: невозможно изменить AllowsTransparencyпосле того, как было показано окно или вызван WindowInteropHelper.EnsureHandle.

Я действительно хочу установить прозрачность AllowsTransparency через стиль шаблона пользовательского элемента управления, в противном случае появляется толстая черная граница.

Что вы, ребята, думаете, мне здесь не хватает?

1 Ответ

0 голосов
/ 01 октября 2018

Если вам, ребята, интересно, вот как мне удалось это решитьЯ создал пользовательский элемент управления, который реализует пользовательский элемент управления диалогового окна как таковой

CODE

    public partial class CustomDialogBox : DialogWindow
    {
    public CustomDialogBox()
    {
        InitializeComponent();
    }

, также подключил все пользовательские элементы

    public CustomDialogBox(string title, string header, string message)
    {
        Title = title;
        HeaderText = header;
        MessageText = message;

        InitializeComponent();
    }

XAML

<customcontrols:DialogWindow 
    Style="{StaticResource {x:Type customcontrols:DialogWindow}}"
    >
     <Grid>
     </Grid>
</customcontrols:DialogWindow>

и все, кажется, работает довольно хорошо.Я не думаю, что это довольно хорошая реализация.Мне все еще интересно, есть ли лучшие подходы к этому.

...