none
wpf自定义控件放入比它自身小的容器中,控件的内容被裁切 RRS feed

  • 问题

  • 自定义控件:

    <UserControl x:Class="GameUserControlLibrary.UserGameMenuControl"
                 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" 
                 xmlns:local="clr-namespace:GameUserControlLibrary"
                 mc:Ignorable="d" 
                 d:DesignHeight="300" d:DesignWidth="300">
        <Grid>
            <Border Background="#FF2D2D30" CornerRadius="2" BorderThickness="10">
                <StackPanel>
                    <Rectangle Fill="#FFF4F4F5" Margin="10,20,10,35" Stroke="Black" Height="45"/>
                    <Rectangle Fill="#FFF4F4F5" Margin="20,10,20,35" Stroke="Black" Height="45"/>
                    <Rectangle Fill="#FFF4F4F5" Margin="10,20,10,40" Stroke="Black" Height="45"/>
                </StackPanel>
            </Border>
        </Grid>
    </UserControl>

    放到

    <StackPanel Orientation="Horizontal">
                    <gameusercontrollibrary:UserGameMenuControl  />

    </StackPanel>

    容器的高度只有90

    自定义控件的内容无法全部显示被裁切,如何使自定义控件随容器的大小自动缩放控件的内容

    2017年7月4日 6:49

全部回复

  • Hi Atlantis_happy:

    我有一个简单的方法你可以尝试一下是不是达到你要的效果:

        <StackPanel Orientation="Horizontal">
            <Viewbox Stretch="Fill">
                <gameusercontrollibrary:UserGameMenuControl  />
            </Viewbox>
        </StackPanel>

    加上一个Viewbox控件,设置Stretch为Fill或者Uniform,Fill时时填充效果,而Uniform则是按比例适应。

    此外,是不是可以考虑使用Grid代替StackPanel?

    Best wishes,
    Lee

    2017年7月10日 0:24

  • Hi Atlantis_happy,

    >>自定义控件的内容无法全部显示被裁切,如何使自定义控件随容器的大小自动缩放控件的内容

    我尝试修改你的代码,达到下面的效果.

    UserControl:

        <UserControl x:Class="Wpf_Example.UserControl5"
                 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" 
                 xmlns:local="clr-namespace:Wpf_Example"
                 HorizontalAlignment="Stretch"
    	         VerticalAlignment="Stretch"
    	         HorizontalContentAlignment="Stretch"
      	         VerticalContentAlignment="Stretch"
                 mc:Ignorable="d" 
                 d:DesignHeight="300" d:DesignWidth="300"
                  Height="Auto" Width=" Auto"
                 >
        <Grid>
            <Border Background="#FF2D2D30" CornerRadius="2" BorderThickness="10" Width="Auto" Height="Auto"  >
                <StackPanel Width="Auto" Height="Auto"  >
                    <Rectangle Fill="#FFF4F4F5" Margin="10,20,10,35" Stroke="Black" Height="45"/>
                    <Rectangle Fill="#FFF4F4F5" Margin="20,10,20,35" Stroke="Black" Height="45"/>
                    <Rectangle Fill="#FFF4F4F5" Margin="10,20,10,40" Stroke="Black" Height="45"/>
                </StackPanel>
            </Border>
        </Grid>
    </UserControl>

    Window:

    <Window x:Class="Wpf_Example.UserControl5Test"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:Wpf_Example"
            mc:Ignorable="d"
            Title="UserControl5Test" Height="300" Width="300" >
        <Grid>
            <StackPanel Orientation="Vertical" Margin="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" SizeChanged="StackPanel_SizeChanged">
                <local:UserControl5 x:Name="testuc" />
            </StackPanel>
        </Grid>
    </Window>

    Window.cs:

      public partial class UserControl5Test : Window
        {
            public UserControl5Test()
            {
                InitializeComponent();
            }
    
            private void StackPanel_SizeChanged(object sender, SizeChangedEventArgs e)
            {
                StackPanel sp = (StackPanel)sender;
            
                testuc.Width = sp.ActualWidth;
                testuc.Height = sp.ActualHeight;
            }
        }


    请参考WPF的布局,并尝试调整以便适应你的要求。

    WPF Step By Step 完整布局介绍:
    http://www.cnblogs.com/hegezhou_hot/archive/2012/10/23/2735874.html

    注意:此回复包含对第三方万维网站点的引用。 微软正在为您提供这方面的信息。 Microsoft不控制这些网站,并没有测试这些网站上发现的任何软件或信息; 因此,Microsoft不能对在那里发现的任何软件或信息的质量,安全性或适用性做任何陈述。 使用互联网上发现的任何软件都存在固有的危险,微软警告您确保在从因特网检索任何软件之前,您完全了解风险。

    Best Regards,

    Yohann Lu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年7月10日 8:34
    版主