Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF:RenderTransform应用于;“溢出效应”;内容被切断_C#_Wpf_Rendertransform - Fatal编程技术网

C# WPF:RenderTransform应用于;“溢出效应”;内容被切断

C# WPF:RenderTransform应用于;“溢出效应”;内容被切断,c#,wpf,rendertransform,C#,Wpf,Rendertransform,我有一个控件,其中包含此网格: <Grid SizeChanged="Grid_SizeChanged" MaxWidth="{x:Static local:PaneCtrl.MAX_NO_SCALE_WIDTH}"> <Viewbox MaxHeight="32" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="0,0,0,5"> <DockPanel Widt

我有一个控件,其中包含此网格:

<Grid SizeChanged="Grid_SizeChanged" MaxWidth="{x:Static local:PaneCtrl.MAX_NO_SCALE_WIDTH}">
    <Viewbox MaxHeight="32" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="0,0,0,5">
        <DockPanel Width="{x:Static local:PaneCtrl.MAX_NO_SCALE_WIDTH}">
            <StackPanel x:Name="PlaybackButtons" Orientation="Horizontal" Height="32" HorizontalAlignment="Center" >
                <StackPanel.Effect>
                    <DropShadowEffect ShadowDepth="1" />
                </StackPanel.Effect>
                <Button x:Name="CornerRewind" Style="{StaticResource ImageButtonStyle}"  PreviewMouseLeftButtonDown="CornerPlayerControlFastBackward" >
                    <Image Source="/Pics/FastBackBtn.png" />
                </Button>
                <Button x:Name="CornerStop" Style="{StaticResource ImageButtonStyle}" PreviewMouseLeftButtonDown="CornerPlayerControlStop" >
                    <Image Source="/Pics/StopBtn.png" />
                </Button>
                <Button x:Name="CornerPlay" Style="{StaticResource ImageButtonStyle}" PreviewMouseLeftButtonDown="CornerPlayerControlPlay" >
                    <Image Source="/Pics/PlayBtn.png"/>
                </Button>
                <Button x:Name="CornerPause" Style="{StaticResource ImageButtonStyle}" PreviewMouseLeftButtonDown="CornerPlayerControlPause" >
                    <Image Source="/Pics/PauseBtn.png"/>
                </Button>
                <Button x:Name="CornerFastForward" Style="{StaticResource ImageButtonStyle}" PreviewMouseLeftButtonDown="CornerPlayerControlFastForward" >
                    <Image Source="/Pics/FastFwdBtn.png"/>
                </Button>
                <Button x:Name="CornerStepBack" Style="{StaticResource ImageButtonStyle}" PreviewMouseLeftButtonDown="CornerPlayerControlBackAfewSec" >
                    <Image Source="/Pics/BackAfewSecBtn.png"/>
                </Button>
                <Button x:Name="CornerGoToLive" Style="{StaticResource ImageButtonStyle}" PreviewMouseLeftButtonDown="CornerPlayerControlLive" >
                    <Image Source="/Pics/LiveBtn.png"/>
                </Button>
            </StackPanel>
        </DockPanel>
    </Viewbox>
</Grid>    

这个XAML的作用是,当它放置在一个宽度>=PaneCtrl.MAX\u NO\u SCALE\u Width的容器中时,它会以原始大小显示按钮,但当它放置在一个宽度 我想在代码中实现同样的效果。别问我为什么——要花很长时间来解释

因此,我删除了ViewBox和其他使其得以实现的元素,留下了这个XAML:

<Grid SizeChanged="Grid_SizeChanged" >
    <StackPanel x:Name="PlaybackButtons" Orientation="Horizontal" Height="32"  HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="0,0,0,5">
        <StackPanel.Effect>
            <DropShadowEffect ShadowDepth="1" />
        </StackPanel.Effect>
        <Button x:Name="CornerRewind" Style="{StaticResource ImageButtonStyle}"  PreviewMouseLeftButtonDown="CornerPlayerControlFastBackward" >
            <Image Source="/Pics/FastBackBtn.png" />
        </Button>
        <Button x:Name="CornerStop" Style="{StaticResource ImageButtonStyle}" PreviewMouseLeftButtonDown="CornerPlayerControlStop" >
            <Image Source="/Pics/StopBtn.png" />
        </Button>
        <Button x:Name="CornerPlay" Style="{StaticResource ImageButtonStyle}" PreviewMouseLeftButtonDown="CornerPlayerControlPlay" >
            <Image Source="/Pics/PlayBtn.png"/>
        </Button>
        <Button x:Name="CornerPause" Style="{StaticResource ImageButtonStyle}" PreviewMouseLeftButtonDown="CornerPlayerControlPause" >
            <Image Source="/Pics/PauseBtn.png"/>
        </Button>
        <Button x:Name="CornerFastForward" Style="{StaticResource ImageButtonStyle}" PreviewMouseLeftButtonDown="CornerPlayerControlFastForward" >
            <Image Source="/Pics/FastFwdBtn.png"/>
        </Button>
        <Button x:Name="CornerStepBack" Style="{StaticResource ImageButtonStyle}" PreviewMouseLeftButtonDown="CornerPlayerControlBackAfewSec" >
            <Image Source="/Pics/BackAfewSecBtn.png"/>
        </Button>
        <Button x:Name="CornerGoToLive" Style="{StaticResource ImageButtonStyle}" PreviewMouseLeftButtonDown="CornerPlayerControlLive" >
            <Image Source="/Pics/LiveBtn.png"/>
        </Button>
    </StackPanel>
</Grid>    

然后我添加了调整大小事件处理程序:

    private void Grid_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        if (e.NewSize.Width < PaneCtrl.MAX_NO_SCALE_WIDTH)
        {
            double scale = e.NewSize.Width / PaneCtrl.MAX_NO_SCALE_WIDTH;
            PlaybackButtons.RenderTransform = new ScaleTransform(scale, scale, PlaybackButtons.ActualWidth / 2, PlaybackButtons.ActualHeight);
        }
        else
        {
            PlaybackButtons.RenderTransform = null;
        }
    }
private void Grid\u SizeChanged(对象发送方,sizechangedventargs e)
{
如果(例如NewSize.Width
我看到的是,它的行为方式类似,但当容器宽度很小时,一些原始大小的按钮会被切掉(未显示),在我缩放StackPanel后,它们也不会显示,即使现在应该有足够的空间显示它们

所以我的问题自然是为什么

可能是因为WPF首先确定它们需要隐藏,然后引发SizeChanged事件,允许我缩放它们,之后不会“重新排列”它们


我应该挂接一个不同的事件,还是应该调用一些东西来强制WPF“重新安排”或什么?

p.S.我已经尝试添加InvalidateArrange();在Grid_SizeChanged的底部,同时将Grid_SizeChanged中的代码移动到受保护的覆盖大小ArrangeOverride中。在这两种情况下,行为都是一样的(一些按钮仍然没有显示)。我现在有点明白它为什么会这样做了。令人费解的是,我的印象是容器(网格)正在“切掉”PlayBackButtons的末端,但实际上是PlayBackButtons本身(StackPanel)在做这件事。这就是为什么挂接早期事件或调用Arrange不起作用的原因。可能有效的方法是缩放PlayBackButtons的内部,而不是PlayBackButtons,但我仍然没有一种干净的工作方式。