programing

코드에서 동적 리소스 스타일을 할당하려면 어떻게 해야 합니까?

newsource 2023. 4. 15. 08:55

코드에서 동적 리소스 스타일을 할당하려면 어떻게 해야 합니까?

XAML에서 이와 동등한 것을 코드로 제작하고 싶다.

<TextBlock
Text="Title:"
Width="{Binding FormLabelColumnWidth}"
Style="{DynamicResource FormLabelStyle}"/>

텍스트와 너비는 할 수 있지만 동적 리소스를 스타일에 할당하려면 어떻게 해야 합니까?

TextBlock tb = new TextBlock();
            tb.Text = "Title:";
            tb.Width = FormLabelColumnWidth;
            tb.Style = ???

FrameworkElement를 사용해야 합니다.진정한 DynamicResource 동작을 원하는 경우 SetResourceReference(리소스 변경 시 타깃 요소 업데이트)를 설정합니다.

tb.SetResourceReference(Control.StyleProperty, "FormLabelStyle")

다음 작업을 수행할 수 있습니다.

tb.Style = (Style)FindResource("FormLabelStyle");

맛있게 드세요!

당초의 질문은, 자원을 변경하면 컨트롤이 갱신되는, 다이나믹하게 하는 방법이었습니다.위의 최선의 답변은 SetResourceReference를 사용했습니다.Xamarin 프레임워크에서는 이 기능을 사용할 수 없지만 SetDynamicResource는 원래 포스터에서 요청했던 대로 작동합니다.간단한 예

        Label title = new Label();
        title.Text = "Title";
        title.SetDynamicResource(Label.TextColorProperty, "textColor");
        title.SetDynamicResource(Label.BackgroundColorProperty, "backgroundColor");

지금 통화 중:

        App.Current.Resources["textColor"] = Color.AliceBlue;
        App.Current.Resources["backgroundColor"] = Color.BlueViolet;

이 방법으로 리소스를 사용하는 모든 컨트롤의 속성이 변경됩니다.모든 속성에서 사용할 수 있습니다.

이 조작은 유효합니다.

tb.SetValue(Control.StyleProperty, "FormLabelStyle");

Application.Current.Resources.TryGetValue("ResourceKey", out var value)

언급URL : https://stackoverflow.com/questions/1754615/how-to-assign-a-dynamic-resource-style-in-code