Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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# 允许控件增长,但不要收缩_C#_Wpf - Fatal编程技术网

C# 允许控件增长,但不要收缩

C# 允许控件增长,但不要收缩,c#,wpf,C#,Wpf,我基本上有这样的设置: <GroupBox> <TextBlock Name="tbValue"/> </GroupBox> 文本块的内容经常更改(显示传感器的测量值)。这导致groupbox的宽度一直在变化,看起来和感觉都像垃圾 有人知道我如何使groupbox在文本更改时自动增长,但在文本再次变短时不会再次变短吗?只需处理事件并将groupbox的属性设置为MinWidth和以下值之间的最大值: 只需处理事件,并将GroupBox的属性设置为Mi

我基本上有这样的设置:

<GroupBox>
  <TextBlock Name="tbValue"/>
</GroupBox>

文本块的内容经常更改(显示传感器的测量值)。这导致groupbox的宽度一直在变化,看起来和感觉都像垃圾

有人知道我如何使groupbox在文本更改时自动增长,但在文本再次变短时不会再次变短吗?

只需处理事件并将
groupbox
的属性设置为
MinWidth
和以下值之间的最大值:

只需处理事件,并将
GroupBox
的属性设置为
MinWidth
和以下值之间的最大值:


可以提出行为建议。原始样品

public class GrowOnlyWidthBehavior : Behavior<FrameworkElement>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject.SizeChanged += OnSizeChanged;
    }

    private void OnSizeChanged(object sender, SizeChangedEventArgs e)
    {
        AssociatedObject.MinWidth = Math.Max(AssociatedObject.MinWidth, AssociatedObject.ActualWidth);
    }
}
公共类growtonlyWidthBehavior:Behavior
{
受保护的覆盖无效附加()
{
base.onatached();
AssociatedObject.SizeChanged+=OnSizeChanged;
}
私有void OnSizeChanged(对象发送方,SizeChangedEventArgs e)
{
AssociatedObject.MinWidth=Math.Max(AssociatedObject.MinWidth,AssociatedObject.ActualWidth);
}
}

更新的行为。感谢安德鲁斯指出前面代码中的错误。我使用了HighCore的答案中的逻辑。

可以提出行为。原始样品

public class GrowOnlyWidthBehavior : Behavior<FrameworkElement>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject.SizeChanged += OnSizeChanged;
    }

    private void OnSizeChanged(object sender, SizeChangedEventArgs e)
    {
        AssociatedObject.MinWidth = Math.Max(AssociatedObject.MinWidth, AssociatedObject.ActualWidth);
    }
}
公共类growtonlyWidthBehavior:Behavior
{
受保护的覆盖无效附加()
{
base.onatached();
AssociatedObject.SizeChanged+=OnSizeChanged;
}
私有void OnSizeChanged(对象发送方,SizeChangedEventArgs e)
{
AssociatedObject.MinWidth=Math.Max(AssociatedObject.MinWidth,AssociatedObject.ActualWidth);
}
}

更新的行为。感谢安德鲁斯指出前面代码中的错误。我使用了HighCore的答案中的逻辑。

你能不能设置一个最小宽度?我可以,但这会导致大量空白,看起来很难看。用户还可以更改显示值的单位,所有内容都非常灵活,因此我希望使用更通用的方法来实现这一点。您是否可以设置最小宽度?我可以,但这将导致大量空白,看起来很难看。用户还可以更改显示值的单位,一切都非常灵活,所以我更喜欢一种更通用的方法来实现这一点。这真的有效吗?我的意思是SizeChanged是一个通知事件-它是从UIElement的OnRenderSizeChanged方法调用的,该方法是在度量/排列完成后从UpdateLayout调用的。Handled仅在args上,因为它派生自RoutedEventArgs.but+1用于使用附加属性/行为!谢谢@安德鲁斯:非常感谢你的来信。JCH2k,我已经更新了我的代码,使其正常工作。现在是我的代码和HighCore的混合这真的有效吗?我的意思是SizeChanged是一个通知事件-它是从UIElement的OnRenderSizeChanged方法调用的,该方法是在度量/排列完成后从UpdateLayout调用的。Handled仅在args上,因为它派生自RoutedEventArgs.but+1用于使用附加属性/行为!谢谢@安德鲁斯:非常感谢你的来信。JCH2k,我已经更新了我的代码,使其正常工作。现在是我的代码和HighCore的混合,像这样的问题是你使用的是实际宽度,这是它的排列位置,可能远远高于退浆宽度。例如,如果控件停靠在窗口的底部或顶部,它会像窗口一样变宽,但是如果您尝试使窗口变小,groupbox将保持如此大的大小。我认为您可能需要派生一个元素(例如,来自Decorator)并根据所包含子元素的所需大小在度量中处理它。@AndrewS这足以满足OP的要求。我很确定
GroupBox
设置为拉伸到
TextBlock
的宽度。这完全符合我的要求!谢谢这样的问题是,你使用的是实际宽度,这是它被安排在,这可能远远高于退浆宽度。例如,如果控件停靠在窗口的底部或顶部,它会像窗口一样变宽,但是如果您尝试使窗口变小,groupbox将保持如此大的大小。我认为您可能需要派生一个元素(例如,来自Decorator)并根据所包含子元素的所需大小在度量中处理它。@AndrewS这足以满足OP的要求。我很确定
GroupBox
设置为拉伸到
TextBlock
的宽度。这完全符合我的要求!谢谢
public class GrowOnlyWidthBehavior : Behavior<FrameworkElement>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject.SizeChanged += OnSizeChanged;
    }

    private void OnSizeChanged(object sender, SizeChangedEventArgs e)
    {
        AssociatedObject.MinWidth = Math.Max(AssociatedObject.MinWidth, AssociatedObject.ActualWidth);
    }
}