Следующий код работал нормально. В другом месте кода была ошибка. Тем не менее, данный совет хорош.
Я пытаюсь связать Width
из TextBox
с процентом от Width
родительского элемента управления. Я знаю, что могу сделать нечто подобное, просто установив Margin
, но мне было интересно, почему это не работает.
Сначала я установил ссылку на IValueConverter
в коллекции ресурсов моего пользовательского элемента управления:
<UserControl.Resources>
<local:TextBoxWidthConverter x:Key="txtWidthConv" />
</UserControl.Resources>
В основном xaml у меня есть следующее:
<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>
ivalueconverter выглядит так:
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
}
Установка свойства width здесь ничего не делает, не говоря уже о настройке IValueConverter
. Я бы ожидал, что ScrollViewer
будет 1/4 ширины родителя StackPanel
.