matlab设置宽⾼⽐,WPF:将宽度(和⾼度)设置为百分⽐值将其拉伸到与⽗容器⼤⼩相同的⽅式是使⽤属性:
这将使⽂本框元素⽔平拉伸,并⽔平填充所有的⽗空间(实际上它取决于你正在使⽤的⽗⾯板,但应该适⽤于⼤多数情况下)。
百分⽐只能与⽹格单元格值⼀起使⽤,所以另⼀种select是创build⽹格并将⽂本框放⼊其中⼀个具有适当百分⽐的单元格中。
这是我以前从09年发布的更新的答案,其中包含不正确的信息。 下⾯的例⼦应该certificate更好:
您可以将⽂本框放在⽹格中,以在⽹格的⾏或列上执⾏百分⽐值,并让⽂本框⾃动填充到其⽗级单元格(因为它们将默认为默认值)。 例:
这将使#1 2/5的宽度,#2 3/5。
原始post中有不正确的/不完整的信息
不要以为你可以做%,但你可以做*
例:
这将使#1 2/5的宽度,#2 3/5。
通常情况下,您将使⽤适合您的scheme的内置布局控件(例如,如果要相对于⽗级缩放,则使⽤⽹格作为⽗级)。 如果你想⽤⼀个任意的⽗元素来实现,你可以创build⼀个ValueConverter来实现,但是它可能不会像你想的那么⼲净。 但是,如果你绝对需要它,你可以做这样的事情:
public class PercentageConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return System.Convert.ToDouble(value) * System.Convert.ToDouble(parameter); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }
可以像这样使⽤,以获得⼀个⼦⽂本框的10%的⽗级canvas的宽度:
对于任何遇到错误的⼈: '2 *'string不能转换为长度。
Your text block a:Your text block b:
我使⽤两种⽅法进⾏相对⼤⼩调整。 我有⼀个叫做Relative的类,有三个附加的属性To , WidthPercent和HeightPercent ,如果我想让⼀个元素成为视觉树中任何⼀个元素的相对⼤⼩,并且感
觉⽐转换器的⽅法更简单,你,你很⾼兴。
另⼀种⽅法更狡猾。 添加⼀个你想要的相对⼤⼩的ViewBox ,然后在⾥⾯,添加⼀个宽度为100的Grid 。然后,如果你添加⼀个宽度为10的TextBlock ,那显然是100的10%。
ViewBox将根据给定的空间来缩放Grid ,所以如果它是⽹页上唯⼀的东西,那么Grid将会被全部缩放并且有效,你的TextBlock被缩放到页⾯的10%。margin属性值可以为百分比
如果你没有在Grid上设置⾼度,那么它会缩⼩以适应它的内容,所以它会相对较⼤。 你必须确保内容不会太⾼,即开始改变ViewBox的空间宽⾼⽐,否则它将开始缩放⾼度。 你可以⽤Stretch of UniformToFill解决这个UniformToFill 。
我知道这不是Xaml,但我做了与⽂本框的SizeChanged事件相同的事情:
private void TextBlock_SizeChanged(object sender, SizeChangedEventArgs e) { TextBlock textBlock = sender as TextBlock; FrameworkElement element = textBlock.Parent as FrameworkElement; textBlock.Margin = new Thickness(0, 0,
(element.ActualWidth / 100) * 20, 0); }
该⽂本框似乎是它的⽗母的80%⼤⼩(很好的边缘是20%),并在需要的时候伸展。
ConverterClass:
public class SizePercentageConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (parameter == null) return 0.7 * value.ToDouble(); string[] split =
parameter.ToString().Split('.'); double parameterDouble = split[0].ToDouble() + split[1].ToDouble() / (Math.Pow(10,
split[1].Length)); return value.ToDouble() * parameterDouble; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { // Don't need to implement this return null; } }
XAML:
....

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。