WPF向窗口添加黑条

时间:2015-05-10 12:57:44

标签: c# wpf xaml

我已经构建了一个具有可变宽度和高度的WPF应用程序(窗口的xaml高度和宽度定义设置为Auto)。一旦加载了窗口的内容,宽度就不会(好吧,不应该)改变。当项目从列表中删除或添加时,高度可能会发生变化。

背景是渐变,而不是图像。

在应用程序空闲并且不是最顶层的一段时间后,当切换回应用程序时,窗口会随着添加黑条而变宽,将窗口向右延伸。
I've blurred out the content as it is unimportant here
(在出现此黑条之前,窗口的宽度是具有蓝色渐变背景的部分)

我在窗口中添加了一个隐藏的菜单项,当用户按下Alt时,会出现菜单。起初,我只是添加了菜单并打开它,导致窗口重新渲染为菜单,项目突然变得可见并添加到窗口的高度。当窗口重新渲染时,黑条消失,窗口是原始宽度。

我通过添加Window.OnFocus调用函数的事件来尝试以下解决方案:

  1. 更改宽度(添加1个像素,然后删除1个像素)......但这似乎没有做任何事情。
  2. 检查窗口的宽度。如果宽度大于预期宽度,则手动调用重新渲染。但没有骰子......
  3. 导致此黑条出现的原因是什么?我该如何防止它发生?

    这里最大的问题是我似乎无法一致地重现这个问题......有时候,应用程序会一直打开,在后台闲置一整天,这不会发生。有时,我会出去吃午饭,回来然后就是......

    内容在启动时动态加载,并且每隔几分钟启动一次Web服务调用以检查更改。在开发和测试的这个阶段,并没有发生很多变化,因此ui项目大部分时间都是静态的。即便如此,如上所述,这个黑条会在申请闲置一段时间后出现。

    根据建议,这是应用程序的xaml:

    主窗口:

    <Window x:Class="MyApp.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:y="clr-namespace:MyApp"
            Title="MyApp"
            Height="Auto" Width="390"
            SizeToContent="WidthAndHeight"
            WindowStyle="SingleBorderWindow"
            WindowStartupLocation="Manual"
            ResizeMode="CanMinimize">
        <Grid Name="MainGrid" Style="{StaticResource Normal}">
            <Grid.RowDefinitions>
                <RowDefinition Height="18" />
                <RowDefinition Height="65"/>
                <RowDefinition Height="Auto" MinHeight="200"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="150" />
                <ColumnDefinition Width="218" />
            </Grid.ColumnDefinitions>
            <Menu Grid.ColumnSpan="2"
                  [SETTINGS REMOVED FOR BREVITY]>
            </Menu>
            [ELEMENTS REMOVED FOR BREVITY]
            <Grid Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Height="Auto" Width="Auto" x:Name="ContentGrid"></Grid>
        </Grid>
    </Window>
    

    MainPanel(进入ContentGrid):

    <UserControl x:Class="MyApp.MainPanel"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 Height="Auto" Width="Auto" FlowDirection="RightToLeft">
        <Grid Margin="19,0,19,0">
            <Grid.RowDefinitions>
                <RowDefinition Height="65" />
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="75" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="160" />
                <ColumnDefinition Width="85" />
                <ColumnDefinition Width="85" />
            </Grid.ColumnDefinitions>
            <TextBlock Name="FirstHeader" Grid.Column="0" Grid.Row="0" Style="{StaticResource Header}" Text="***" />
            <TextBlock Name="SecondHeader" Grid.Column="1" Grid.Row="0" Style="{StaticResource Header}">***<LineBreak />***</TextBlock>
            <TextBlock Name="ThirdHeader" Grid.Column="2" Grid.Row="0" Style="{StaticResource Header}" Text="***" />
            <StackPanel Name="MainStack" Grid.Row="1" Grid.ColumnSpan="3" />
            <Button Name="ActionButton" Grid.ColumnSpan="3" Grid.Row="2" FlowDirection="LeftToRight" Style="{StaticResource NotInService}"  Click="ActionButton_Click" />
        </Grid>
    </UserControl>
    

    MainStack中的MainPanel充满了以下内容:

    <UserControl x:Class="MyApp.mItem"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 mc:Ignorable="d" 
                 d:DesignHeight="35" d:DesignWidth="348" FlowDirection="RightToLeft">
        <Grid Margin="0,0,0,05">
            <Grid.RowDefinitions>
                <RowDefinition />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="160" />
                <ColumnDefinition Width="85" />
                <ColumnDefinition Width="85" />
            </Grid.ColumnDefinitions>
            <Button Grid.Row="0" Grid.Column="0" Name="PanelActionButton" Style="{StaticResource PanelActionButton}" Click="PanelActionButton_Click">
                <TextBlock Name="AnswerButtonText" Style="{StaticResource ButtonText}"></TextBlock>
            </Button>
            <Label Grid.Row="0" Grid.Column="1" Name="SecondCol" Style="{StaticResource SecondCol}" />
            <Label Grid.Row="0" Grid.Column="2" Name="ThirdCol" Style="{StaticResource ThirdCol}" />
        </Grid>
    </UserControl>
    

    我不知道它是否相关,但这就是我设计背景的方式:

            <Style TargetType="{x:Type Grid}" x:Key="Normal">
                <Setter Property="Background">
                    <Setter.Value>
                        <RadialGradientBrush GradientOrigin="0.5,0.5" Center="0.5,0.5" RadiusX="1" RadiusY="1">
                            <RadialGradientBrush.GradientStops>
                                <GradientStop Color="#00AEEF" Offset="0" />
                                <GradientStop Color="#034ea2" Offset="1" />
                            </RadialGradientBrush.GradientStops>
                        </RadialGradientBrush>
                    </Setter.Value>
                </Setter>
                <Setter Property="FlowDirection" Value="RightToLeft" />
            </Style>
    

0 个答案:

没有答案