두 경우 모두 해결되었으므로 정보에 대한 첫 번째 답변 의견을 살펴보십시오.텍스트 상자의 멀티 바인딩이 작동하지 않습니다.
이 코드는 런타임에 오류가 발생하지만 컴파일됩니다. 예외는 말한다 :
A first chance exception of type 'System.Windows.Markup.XamlParseException' occurred in PresentationFramework.dll
.
MultiBinding에서 두 번째 바인딩 소스를 설정하려고 할 때 구문 분석 예외가 발생합니다. 나는 많은 방법의 지옥을 시도하고 ~ 20 기사를 통해 파고 있지만, 나는 여기서 무엇이 잘못되었는지를 알 수 없다.
가장 좋은 추측은 어떻게 든 컨버터의 잘못된 반환 유형에 연결되어 있다는 것입니다.
그리고 btw, TextBox를 TextBlock로 변경하면 첫 번째 경우가 작동합니다. 두 번째 사례는 아직 작동하지 않습니다.
사례 1
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(); } } }
Mode="OneWay"
을 설정해야
먼저, 이미 답변 한 경우 질문을 크게 변경해서는 안됩니다. 정말 혼란스러워! 다른 질문을하는 것이 좋습니다. 그렇다면 정확히 "두 번째 사례는 아직 작동하지 않는다"는 것을 의미합니까? XamlParseException도 거기에 있습니까? – Clemens
변경에 대해 죄송 합니다만, 낮은 등급으로 인해 더 많은 시간 동안 내 자신의 질문에 답변 할 수 없습니다. 두 번째 경우는 오류없이 컴파일되고 작업되었습니다. 그러나 TextBlock의 높이가 내 멀티 바인딩으로 인해 변경되지 않았습니다. 다시 한번 감사드립니다. – sdd