我的MainWindow中有一个简单的用户控件。我正在尝试创建一个简单易用的简单窗口模板。我有一个用户控件,这似乎很好地服务于我的目的......有点......
如果我在usercontrol中设置AllowTransparency和WindowStyle,则项目成功编译,但在控件的MainWindow中,我将对象未设置为实例...并且整个控件带有下划线。如果我在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年来网络开发WPF对我来说有点新鲜。
这是WPF的正常行为吗? 是否存在此问题所以我可以在usercotrol中设置窗口属性?
答案 0 :(得分:0)
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}"
答案 1 :(得分:0)
发现错误。我发送了我的一个函数int,以便我知道哪个窗口正在加载。因为在应用程序未运行时没有初始化窗口或变量,Visual Studio决定我的整数超出数组的范围。围绕上面的代码添加一个简单的if语句修复了所有问题。 Picky Picky WPF。
凯文,我不确定你对View Model的意思。在阅读之后,我的案例中的xaml.cs或UserControl将是ViewModel正确吗?这是我的修复。
if (LoadingWindow > -1 && Application.Current.Windows.Count > LoadingWindow) {
// Load Window
}