Как изменить Контент Контроля (создать новый контент и восстановить старый контент позже) C #? - PullRequest
0 голосов
/ 08 июня 2019

Мне нужно изменить мои XAML элементы по коду.Мне нужно заменить оригинальный content новым content внутри ScrollViewer "XAML_ScrollViewer".Простой пример XAML кода.

<ScrollViewer x:Name="XAML_ScrollViewer">
    <ListView x:Name="XAML_ListView">
        <ListView.ItemTemplate>
            <DataTemplate x:DataType="data:SomeInformation">
                <Grid>

                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</ScrollViewer>

Для этого я использую следующий код.Пока все хорошо.Новый content появляется так, как должен.

C #

//SourceElementParent = XAML_ScrollViewer

//GET PRESENT CONTENT
FrameworkElement ControlOldContent = (SourceElementParent as ContentPresenter).Content as FrameworkElement;
//CREATE NEW GRID
Grid NewParentGrid = new Grid();
//USE NEW GRID AS CONTENT
(SourceElementParent as ContentPresenter).Content = NewParentGrid;
//ADD SOME ELEMENT 01
NewParentGrid.Children.Add(XAMLElement_01);
//ADD SOME ELEMENT 02
NewParentGrid.Children.Add(XAMLElement_02);
//ADD OLD CONTENTS INTO A NEW GRID
NewParentGrid.Children.Add(ControlOldContent );

Но когда мне нужно восстановить исходный content, я не могу этого сделать.Следующий код работает, НО созданный Grid внутри ScrollViewer должен остаться.

C #

//CLEAR ALL CHILDREN OF THE GRID
((SourceElementParent  as ContentPresenter).Content as Grid).Children.Clear();
//ADD OLD CONTENT TO THE GRID
((SourceElementParent  as ContentPresenter).Content as Grid).Children.Add(ControlOldContent);

Поскольку я хочу восстановить элемент управления ScrollViewer в старом состоянии (contentкак это было до какой-либо модификации) Мне также нужно избавиться от Grid, который я создал ранее.Но если я это сделаю, я получу exception, если я изменю размер окна с помощью мыши.Если я не изменяю размер, все выглядит хорошо.

Я получаю следующее исключение:

e = {Windows.UI.Xaml.UnhandledExceptionEventArgs} Exception = {"Недопустимый указатель \ r \ n \r \ nНеверный указатель \ r \ n "}

Я пытался использовать следующий код для восстановления contents, но это не удалось.

C #

//CLEAR ALL CHILDREN OF GRID
((SourceElementParent  as ContentPresenter).Content as Grid).Children.Clear();
//ADD ORIGINAL CONTENT
(SourceElementParent  as ContentPresenter).Content = ControlOldContent;

Итак, любойХорошие советы, как решить эту проблему?

1 Ответ

0 голосов
/ 09 июня 2019

Наконец-то нашел рабочее решение.Content необходимо восстановить как новый ScrollContentPresenter.Таким образом, тип ContentPresenter должен быть точно правильным, и я не осознавал этого раньше.

//CLEAR ALL CHILDREN OF GRID
((SourceElementParent  as ContentPresenter).Content as Grid).Children.Clear();
//RESTORE SCROLLVIEWER CONTENT.
(SourceElementParent as ScrollContentPresenter).Content = new ScrollContentPresenter() { Content = ControlOldContent };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...