在用户控件中设置 WindowStyle 和 AllowTransparency
Setting WindowStyle and AllowTransparency in usercontrol
我的 MainWindow 中有一个简单的用户控件。我正在尝试创建一个易于移植的简单 Window 模板。我有一个用户控件,到目前为止这似乎很好地满足了我的目的……有点……
如果我在用户控件中设置 AllowTransparency 和 WindowStyle,项目编译成功,但在控件的 MainWindow 中,我得到 Object Not Set to Instance of... 以及整个控件有下划线。如果我在 MainWindow 中设置,一切都很好。我可以接受这个但不是想要的结果。
xaml
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cntl="clr-namespace:Rtg"
Title="MainWindow" Height="400" Width="525">
<!-- if I add windowstyle and allowtransparency here all good -->
<Grid>
<cntl:test1 WinTitle="test window framing">
<cntl:test1.PlaceHolder1>
<Grid Background="Orange">
<TextBox BorderBrush="Transparent" Text="Content in placehoder:" Height="35" Width="175" Margin="0,10,270,0" Background="Transparent" FontSize="16" ></TextBox>
<Button Width="100" Height="35" Content="click me" FontSize="16"></Button>
</Grid>
</cntl:test1.PlaceHolder1>
</cntl:test1>
</Grid>
</Window>
C#
public test1() {
Window win = Application.Current.MainWindow;
win.WindowStyle = System.Windows.WindowStyle.None;
win.AllowsTransparency = true;
InitializeComponent();
ctrTest2.Title = WinTitle;
}
过去 15 年一直在进行 Web 开发 WPF 对我来说有点陌生。
这是 WPF 的正常行为吗?
有没有 Around This 这样我可以在 usercotrol 中设置 window 属性?
public test1() {
InitializeComponent();
ctrTest2.Title = WinTitle;
//Need to do it after Initialization
Window win = Application.Current.MainWindow;
win.WindowStyle = System.Windows.WindowStyle.None;
win.AllowsTransparency = true;
}
一种更 "WPF" 的处理方式是创建一个 ViewModel 并绑定属性
public class MainViewModel : INotifiyPropertyChanged{
private WindowStyle _windowStyle;
public WindowStyle WinStyle {
get{
return _windowStyle;
}
set{
_windowStyle = value;OnPropertyChanged("WinStyle");
}
}
}
并且在 XAML
WindowStyle="{Binding Path=WinStyle}"
发现错误。我正在向我的一个函数发送一个 int,以便我知道正在加载哪个 window。因为当应用程序不是 运行 时没有 windows 或变量被初始化,Visual Studio 决定我的整数超出了数组的范围。在上面的代码周围添加一个简单的 if 语句解决了所有问题。挑剔挑剔的 WPF。
凯文,我不确定你所说的视图模型是什么意思。在阅读了一些 xaml.cs 或 UserControl 之后,我的情况下 ViewModel 是否正确?
这是我的解决方法。
if (LoadingWindow > -1 && Application.Current.Windows.Count > LoadingWindow) {
// Load Window
}
我的 MainWindow 中有一个简单的用户控件。我正在尝试创建一个易于移植的简单 Window 模板。我有一个用户控件,到目前为止这似乎很好地满足了我的目的……有点……
如果我在用户控件中设置 AllowTransparency 和 WindowStyle,项目编译成功,但在控件的 MainWindow 中,我得到 Object Not Set to Instance of... 以及整个控件有下划线。如果我在 MainWindow 中设置,一切都很好。我可以接受这个但不是想要的结果。
xaml
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cntl="clr-namespace:Rtg"
Title="MainWindow" Height="400" Width="525">
<!-- if I add windowstyle and allowtransparency here all good -->
<Grid>
<cntl:test1 WinTitle="test window framing">
<cntl:test1.PlaceHolder1>
<Grid Background="Orange">
<TextBox BorderBrush="Transparent" Text="Content in placehoder:" Height="35" Width="175" Margin="0,10,270,0" Background="Transparent" FontSize="16" ></TextBox>
<Button Width="100" Height="35" Content="click me" FontSize="16"></Button>
</Grid>
</cntl:test1.PlaceHolder1>
</cntl:test1>
</Grid>
</Window>
C#
public test1() {
Window win = Application.Current.MainWindow;
win.WindowStyle = System.Windows.WindowStyle.None;
win.AllowsTransparency = true;
InitializeComponent();
ctrTest2.Title = WinTitle;
}
过去 15 年一直在进行 Web 开发 WPF 对我来说有点陌生。
这是 WPF 的正常行为吗? 有没有 Around This 这样我可以在 usercotrol 中设置 window 属性?
public test1() {
InitializeComponent();
ctrTest2.Title = WinTitle;
//Need to do it after Initialization
Window win = Application.Current.MainWindow;
win.WindowStyle = System.Windows.WindowStyle.None;
win.AllowsTransparency = true;
}
一种更 "WPF" 的处理方式是创建一个 ViewModel 并绑定属性
public class MainViewModel : INotifiyPropertyChanged{
private WindowStyle _windowStyle;
public WindowStyle WinStyle {
get{
return _windowStyle;
}
set{
_windowStyle = value;OnPropertyChanged("WinStyle");
}
}
}
并且在 XAML
WindowStyle="{Binding Path=WinStyle}"
发现错误。我正在向我的一个函数发送一个 int,以便我知道正在加载哪个 window。因为当应用程序不是 运行 时没有 windows 或变量被初始化,Visual Studio 决定我的整数超出了数组的范围。在上面的代码周围添加一个简单的 if 语句解决了所有问题。挑剔挑剔的 WPF。
凯文,我不确定你所说的视图模型是什么意思。在阅读了一些 xaml.cs 或 UserControl 之后,我的情况下 ViewModel 是否正确?
这是我的解决方法。
if (LoadingWindow > -1 && Application.Current.Windows.Count > LoadingWindow) {
// Load Window
}