以下代码运行正常。代码中的其他地方出错。不过,给出的建议是好的。
我正在尝试将Width
的{{1}}绑定到父控件的TextBox
的百分比。我知道只需设置一个Width
即可完成类似的工作,但我想知道为什么这不起作用。
首先,我在用户控件的资源集合中设置了对Margin
的引用:
IValueConverter
在主要的xaml中,我有以下内容:
<UserControl.Resources>
<local:TextBoxWidthConverter x:Key="txtWidthConv" />
</UserControl.Resources>
ivalueconverter看起来像这样:
<StackPanel Name="parentPanel" Width="300">
<ScrollViewer HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Hidden" Name="scroller" Width="{Binding Width,
ElementName=parentPanel, Converter={StaticResource txtWidthConv}}">
<StackPanel Orientation="Horizontal">
<TextBox></TextBox>
</StackPanel>
</ScrollViewer>
</StackPanel>
设置width属性在此处不执行任何操作,更不用说设置public class TextBoxWidthConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double result = (double)value;
if (!Double.IsNaN(result))
{
result = result * .25;
}
else
{
result = 100D;
}
return result;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new System.NotImplementedException("Not implemented.");
}
#endregion
}
了。我希望IValueConverter
的宽度是父ScrollViewer
的1/4。
答案 0 :(得分:2)
让布局系统为您工作而不是与之抗争。 Grid将自动处理相对大小调整:
<StackPanel Name="parentPanel" Width="300">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="3*" />
</Grid.ColumnDefinitions>
<ScrollViewer HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Hidden" Name="scroller">
<StackPanel Orientation="Horizontal">
<TextBox></TextBox>
</StackPanel>
</ScrollViewer>
</Grid>
</StackPanel>
答案 1 :(得分:1)
将ScrollViewer的HorizontalAlignment
设置为Stretch
以外的其他内容。
此外,您应该绑定到ActualWidth
property。