我想创建一个自定义控件模板(在库/单独的程序集上),并基于该自定义控件模板启动一个对话框/消息框,而无需基于该自定义控件模板的单独的客户端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();
尝试启动对话框时遇到的完整错误是
错误:显示窗口或调用WindowInteropHelper.EnsureHandle后,无法更改AllowsTransparency。
我真的很想通过自定义控件模板样式设置AllowsTransparency,否则会出现黑色粗边框。
你们认为我在这里想念什么?
答案 0 :(得分:0)
如果你们有兴趣,这就是我设法解决的方法。 我创建了一个实现自定义对话框窗口控件的用户控件,例如
代码
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>
一切似乎都运行良好。 我认为这不是一个很好的实现。我仍然对是否有更好的方法感兴趣。
答案 1 :(得分:0)
对于在尝试创建自定义窗口类并使用 WPF 样式对其进行样式设置时偶然发现这种情况的任何人,我已经找到了一个很好的解决方案来解决此问题,而无需在 Window 类中使用硬代码 AllowTrasparency
.
我在此处记录并分享了代码:https://gist.github.com/aurimasniekis/53533fddefe95b04bcad37b815197b8e
附言这并不能解决在运行时更改 AllowTrasparency
的问题,但允许您在创建窗口时使用样式来控制它。