소스 검색

Added failing test cases for #10856. (#15338)

This issue only shows up when using the cecil backend for XamlX and so can't easily be tested with unit tests. The easiest way to test it is to add it to a sample project, `BindingDemo` is as good as anywhere I think.
Steven Kirk 1 년 전
부모
커밋
ca520a2332
3개의 변경된 파일59개의 추가작업 그리고 0개의 파일을 삭제
  1. 14 0
      samples/BindingDemo/GenericMarkupExtension.cs
  2. 30 0
      samples/BindingDemo/GenericValueConverter.cs
  3. 15 0
      samples/BindingDemo/MainWindow.xaml

+ 14 - 0
samples/BindingDemo/GenericMarkupExtension.cs

@@ -0,0 +1,14 @@
+using System;
+using Avalonia.Markup.Xaml;
+
+namespace BindingDemo;
+
+internal class GenericMarkupExtension<T> : MarkupExtension
+{
+    public T Value { get; set; }
+
+    public override object ProvideValue(IServiceProvider serviceProvider)
+    {
+        return $"{Value?.GetType().Name}: {Value}";
+    }
+}

+ 30 - 0
samples/BindingDemo/GenericValueConverter.cs

@@ -0,0 +1,30 @@
+using System;
+using System.Globalization;
+using Avalonia.Data.Converters;
+
+#nullable enable
+
+namespace BindingDemo;
+
+public class GenericValueConverter<T> : IValueConverter
+{
+    public GenericValueConverter()
+    {
+        
+    }
+
+    public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
+    {
+        if (value is T)
+        {
+            return $"{typeof(T).Name}: {value}";
+        }
+
+        return null;
+    }
+
+    public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
+    {
+        throw new NotSupportedException();
+    }
+}

+ 15 - 0
samples/BindingDemo/MainWindow.xaml

@@ -120,5 +120,20 @@
         <Button Content="Command Method Do" Command="{Binding Do}" x:Name="ToDo"/>
       </StackPanel>
     </TabItem>
+    <TabItem Header="Advanced">
+      <TabItem.Resources>
+        <local:GenericValueConverter x:Key="BrushConverter" x:TypeArguments="SolidColorBrush"/>
+      </TabItem.Resources>
+      <StackPanel>
+        <!-- Tests for #10856  -->
+        <TextBlock Text="{local:GenericMarkupExtension, Value=Red, x:TypeArguments=Color}"/>
+        <TextBlock HorizontalAlignment="Left"
+                   Text="{Binding $self.Background, Converter={StaticResource BrushConverter}}">
+          <TextBlock.Background>
+            <SolidColorBrush Color="Yellow"/>
+          </TextBlock.Background>
+        </TextBlock>
+      </StackPanel>
+    </TabItem>
   </TabControl>
 </Window>