2011-01-23 72 views
0

以下代碼工作正常。代碼中的其他地方出現錯誤。不過,給出的建議很好。WPF綁定IValueConverter和另一個控件的寬度


我想的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屬性在這裏什麼也不做,讓alon e設置IValueConverter。我希望ScrollViewer是父母StackPanel的寬度的1/4。

+0

我試着用靜態設置`寬度`你的XAML,它工作正常。 – SLaks 2011-01-23 23:30:44

+0

同樣,在VS2008中試過了,`ScrollViewer`是`ParentPanel`大小的四分之一 - 如果你在`TextBox`周圍刪除`StackPanel`,`TextBox`將會擴展到` ScrollViewer`? – 2012-06-08 14:56:11

回答

1

將ScrollViewer的HorizontalAlignment設置爲Stretch以外的值。

此外,你應該綁定到ActualWidth property

+0

這似乎沒有區別。 – 2011-01-23 23:28:33

2

讓佈局系統爲您工作,而不是與之對抗。網格會自動處理相對大小:

<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> 
相關問題