在用户控件中设置 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 

}