Как создать ThemeShadow программно? (C # UWP 1903) - PullRequest
0 голосов
/ 04 октября 2019

Я пытался создать ThemeShadow программно, но не могу решить часть Resources в XAML. Я называю void вот так: CreateTheme(Test,SharedShadow);. Мне нравится избавляться от части SharedShadow при вызове void параметров, чем я могу заставить ее работать без кода в XAML. Как это сделать?

XAML

<Grid>
    <!--HOW TO MAKE THIS PART (RESOURCES) PROGRAMMATICALLY?-->
    <Grid.Resources>
        <ThemeShadow x:Name="SharedShadow" />
    </Grid.Resources>
    <Rectangle x:Name="Test" Width="200" Height="70" Fill="DarkGray" Shadow="{StaticResource SharedShadow}"></Rectangle>
</Grid>

Void - C #

public static void CreateTheme(FrameworkElement TargetFrameworkElement, ThemeShadow SharedShadow)
{
    //In this case we know the Parent will be Grid...
    Grid TargetGrid = VisualTreeHelper.GetParent(TargetFrameworkElement) as Grid;
    //Create the Grid for Shadow        
    Grid ShadowGrid = new Grid() {Margin=new Thickness(-16) };
    //Insert it as first element in its Parent
    TargetGrid.Children.Insert(0, ShadowGrid);
    //Recievers
    SharedShadow.Receivers.Add(ShadowGrid);
    //Translation
    TargetFrameworkElement.Translation += new Vector3(0, 0, 16);
}

1 Ответ

0 голосов
/ 05 октября 2019

Решено окончательно. Следующий код работает очень хорошо. Просто позвоните void следующим образом: CreateTheme(Test, 16); Test - это имя Rectangle, а 16 - это Depth тени.

XAML

<Grid>
    <Rectangle x:Name="Test" Width="200" Height="70" Fill="DarkGray"></Rectangle>
</Grid>

C #

    public static void CreateTheme(FrameworkElement TargetFrameworkElement, int ZDepth)
    {
        //MAKE SURE THAT PARENT IS TYPE OF GRID
        if (VisualTreeHelper.GetParent(TargetFrameworkElement) is Grid)
        {
            //GET PARENT GRID
            Grid ParentGrid = VisualTreeHelper.GetParent(TargetFrameworkElement) as Grid;
            //CREATE BORDER FOR SHADOW (RECIEVER). MAKE SURE THERE ARE SPACE TO SHOW SHADOW SO SET MARGIN NEGATIVE.
            Border ShadowReciever = new Border() { Margin = new Thickness(-ZDepth) };
            //ADD RECIEVER TO PARENT GRID
            ParentGrid.Children.Insert(0, ShadowReciever);
            //CREATE NEW THEME SHADOW
            ThemeShadow SharedShadow = new ThemeShadow();
            //CONNECT SHADOW TO FRAMEWORK ELEMENT
            TargetFrameworkElement.Shadow = SharedShadow;
            //CONNECT RECIEVER TO THEME SHADOW
            SharedShadow.Receivers.Add(ShadowReciever);
            //SET SHADOW DEPTH
            TargetFrameworkElement.Translation += new Vector3(0, 0, ZDepth);
        }
        else
        {
            //ERROR. PARENT MUST BE TYPE OF GRID
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...