Share via

Change Grid Margin Using Visual State | UWP, WinUI3

Anderson Rodrigues Cavalcante 316 Reputation points
2024-06-12T19:09:25.5566667+00:00

I have a grid inside a Style. If this grid has a width > 640 I'd like to change its background for red. If the grid width <= 640 I'd like to change the background for yellow.

How can I do it only using xaml, without code behind?

Obs: It is the grid width, not window width (Adaptative.Trigger MinWindowWidth)

Developer technologies | Universal Windows Platform (UWP)
Developer technologies | XAML
Developer technologies | XAML

A language based on Extensible Markup Language (XML) that enables developers to specify a hierarchy of objects with a set of properties and logic.


Answer accepted by question author

Junjie Zhu - MSFT 21,746 Reputation points
2024-06-13T02:44:56.7733333+00:00

Hi @Anderson Rodrigues Cavalcante ,

Welcome to Microsoft Q&A!

According to the document, VisualStateManager only applies to classes that derive from Control, In WinUI3, Window is not a Control, so VisualStateManager does not work with it.

For UWP, you can use the code in Page.

    <Grid x:Name="grid" Background="Yellow">
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="VisualStateGroup">
                <VisualState x:Name="forTablet">
                    <VisualState.StateTriggers>
                        <AdaptiveTrigger MinWindowWidth="600"/>
                    </VisualState.StateTriggers>
                    <VisualState.Setters>
                        <Setter Target="grid.Background" Value="Red"/>
                    </VisualState.Setters>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>
    </Grid>

But for WinUI3, you need to add a page for the Gird.

<?xml version="1.0" encoding="utf-8"?>
<Window
     ...
     ... >
    <Page>
        <Grid x:Name="grid" Background="Yellow">
            <VisualStateManager.VisualStateGroups>
                <VisualStateGroup x:Name="VisualStateGroup">
                    <VisualState x:Name="forTablet">
                        <VisualState.StateTriggers>
                            <AdaptiveTrigger MinWindowWidth="600"/>
                        </VisualState.StateTriggers>
                        <VisualState.Setters>
                            <Setter Target="grid.Background" Value="Red"/>
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>
        </Grid>
    </Page>
        
</Window>

Thank you.


If the answer is the right solution, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment".

Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.

Was this answer helpful?

1 person found this answer helpful.

0 additional answers

Sort by: Most helpful

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.