在usercontrol中设置WindowStyle和AllowTransparency

时间:2016-11-18 19:58:54

标签: c# wpf xaml user-controls

我的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中设置窗口属性?

2 个答案:

答案 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 

}