這兩種情況都解決了,請查看第一個回答的註釋以獲取有關信息。對文本框的多重綁定不起作用
這段代碼編譯雖然在運行時出錯。例外說:
A first chance exception of type 'System.Windows.Markup.XamlParseException' occurred in PresentationFramework.dll
。
當我嘗試在MultiBinding中爲第二個綁定設置源時,會發生解析異常。我已經嘗試了很多方法,並通過20篇文章進行了深入研究,儘管我無法找到這裏出了什麼問題。
我最好的猜測是它以某種方式連接到轉換器的錯誤返回類型。
而且,順便說一句,當您將TextBox更改爲TextBlock時,第一種情況適用。第二種情況仍然沒有奏效。
CASE1
XAML:
<UserControl x:Class="Draft.MainControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:draft="clr-namespace:Draft"
xmlns:s="clr-namespace:System;assembly=mscorlib"
Height="350" Width="352">
<UserControl.Resources>
<s:String x:Key="str1">HELLO</s:String>
<s:String x:Key="str2">WORLD</s:String>
<draft:StringConverter x:Key="myStringConverter"/>
</UserControl.Resources>
<Grid>
<TextBox Name="tb1">
<TextBox.Text>
<MultiBinding Converter="{StaticResource myStringConverter}">
<Binding Source="{StaticResource str1}" />
<Binding Source="{StaticResource str2}" />
</MultiBinding>
</TextBox.Text>
</TextBox>
</Grid>
</UserControl>
代碼背後:提前
public class StringConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return (values[0].ToString() + values[1].ToString());
}
public object[] ConvertBack(object values, Type[] targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
謝謝!
CASE2
另一種情況爲同樣的問題:
<Grid> <TextBlock TextWrapping="WrapWithOverflow"> <TextBlock.Resources> <s:Int32 x:Key="defaultHeight">2</s:Int32> <s:Int32 x:Key="defaultNum">10</s:Int32> <draft:MultiplierConverter x:Key="myConverter"/> </TextBlock.Resources> <TextBlock.Text> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa </TextBlock.Text> <TextBlock.Height> <MultiBinding Converter="{StaticResource myConverter}"> <Binding Source="{StaticResource defaultNum}" Mode="OneWay" /> <Binding Source="{StaticResource defaultHeight}" Mode="OneWay" /> </MultiBinding> </TextBlock.Height> </TextBlock> </Grid> </UserControl>
Code behind:
public class MultiplierConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { if (values.Count() == 2 && values[0] != DependencyProperty.UnsetValue && values[1] != DependencyProperty.UnsetValue) { var num = (Int32)values[0]; var height = (Int32)values[1]; return (num * height); } return 0; } public object[] ConvertBack(object values, Type[] targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } }
首先,當你的問題已經被回答時,你不應該改變你的問題。這真是令人困惑!最好問另一個問題。那麼,究竟意味着什麼「第二種情況仍然沒有奏效」?你還會在那裏得到一個XamlParseException嗎? – Clemens
對不起,因爲評分太低,我無法回答自己的問題7個小時(我在這裏是新手)。 第二個例子沒有編譯錯誤,雖然TextBlock的高度並沒有因爲我的multiBinding而改變。再次感謝。 – sdd