2017-11-07 1 views
0

Fall Creators 업데이트 SDK에 Markup Extension 클래스가 추가되었습니다. https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.markup.markupextensionUWP MarkupExtension 클래스는 어떻게 사용합니까?

그래서 하나를 만들고 재정의하고 "ProvideValue"메서드를 재정의합니다.

public class MDL2 : MarkupExtension 
{ 
    ... 

    public string Target { get; set; } 

    protected override object ProvideValue() 
    { 
     ... 
    } 
} 

이 나는 ​​스타일 등을 사용하려고 : 이제

<Setter Property="IconGlyph" Value="{u:MDL2 Target='Delete'}" /> 

, 이것은 제대로 내 MDL2 확장에 대한 생성자를 호출, 그리고 문자열 값으로 대상 속성을 설정합니다 "삭제 ". 여태까지는 그런대로 잘됐다.

제외하고 ProvideValue 재정의 호출은 절대로 호출되지 않고 IconGlyph의 TemplateBinding에 액세스 할 때 실제로는 마크 업 확장에서 값을 가져 오는 데 아무런 시도가없는 것 같아 System.Runtime.InteropServices.COMException: Error HRESULT E_FAIL has been returned from a call to a COM component. at Windows.UI.Xaml.FrameworkElement.MeasureOverride(Size availableSize)이됩니다.

실제적으로 발생하는 것은 ProvideValue 메서드를 호출하는 대신 실제로 속성 값을 MarkupExtension ...의 인스턴스로 설정하는 것입니다. 이는 내가 원하지 않는 것이거나 마크 업 확장이 어떻게 작동하는지 기대하지 않습니다.

그럼, 아마도 이것에 대한 답이 많지 않을 것입니다. 그러나이 클래스와 함께 연주 한 사람이 아직 UWP에서 잘 작동하고 있습니까? 예상 되나요? 내 사용법을 잘 모르겠다.

(실제로 그래서 아마도 내가 전에 어떤 형태 MarkupExtension을 사용한 적이 ...)

+0

누락 된 매뉴얼은 [수 있습니다 여기에 있습니다 (https://docs.microsoft.com/en-us/dotnet/framework/xaml-services/markup-extensions-for-xaml-overview). 나는 그것의 많은 것을 이해하지 못한다. 그러나 애트리뷰트를 적용하는 것이 내가 시도 할 첫 번째 것이다. –

답변

1

당신은 당신의 클래스에 MarkupExtensionReturnType 특성을 추가해야합니다

[MarkupExtensionReturnType(ReturnType = typeof(string))] 
public class MDL2 : MarkupExtension 
{ 
+0

감사합니다 - 이것은 실제로 답입니다 - 이미 그것을하고 있지만이 경우에는 완전히 잘못된 유니 코드 형식을 사용하고 있습니다. x : Bind를 사용하여 고정 값에 바인딩하는 방법을 사용했으나 x : Bind를 사용하면 정적 변환기 함수를 통해 정적 변수를 실행하려고했습니다. 스윙과 로터리! (요즘은 IValueConverters 사용을 완전히 피하려고합니다.) –

관련 문제