首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式添加控件,UI不更新

以编程方式添加控件,UI不更新
EN

Stack Overflow用户
提问于 2022-05-21 05:51:30
回答 2查看 1.5K关注 0票数 5

我只是在和.Net毛伊玩。我希望从Rest服务中检索信息,并根据结果以编程方式向VerticalStackLayout添加按钮。调试解决方案时,按钮将添加到VerticalStackLayout中,但UI不会更新。

在这里,代码片段

代码语言:javascript
复制
var  btn  = new Button();
btn.Text = "Button " + count + " added";
btn.Clicked += OnCounterClicked;
btn.HorizontalOptions = LayoutOptions.Center;
VLayout.Add(btn);

这里的XAML

代码语言:javascript
复制
  <ScrollView>
    <VerticalStackLayout x:Name="VLayout"
        Spacing="25" 
        Padding="30,0" 
        VerticalOptions="Center">
        <Image
            Source="dotnet_bot.png"
            SemanticProperties.Description="Cute dot net bot waving hi to you!"
            HeightRequest="200"
            HorizontalOptions="Center" />            
        <Label 
            Text="Hello, World!"
            SemanticProperties.HeadingLevel="Level1"
            FontSize="32"
            HorizontalOptions="Center" />        
        <Label 
            Text="Welcome to .NET Multi-platform App UI"
            SemanticProperties.HeadingLevel="Level2"
            SemanticProperties.Description="Welcome to dot net Multi platform App U I"
            FontSize="18"
            HorizontalOptions="Center" />
            <Entry x:Name="entry"
       Placeholder="Enter text"
       TextChanged="OnTextChanged"
       Completed="OnTextCompleted" />           
        <Button 
            x:Name="KommenBtn"
            Text="Kommen"
            SemanticProperties.Hint="Counts the number of times you click"
            Clicked="OnCounterClicked"
            HorizontalOptions="Center" />
        <Button 
            x:Name="GehenBtn"
            Text="Gehen"
            SemanticProperties.Hint="Counts the number of times you click"
            Clicked="OnCounterClicked"
            HorizontalOptions="Center" />
    </VerticalStackLayout>
</ScrollView>

提前感谢您的提示和帮助!带宽

EN

回答 2

Stack Overflow用户

发布于 2022-05-27 05:45:23

尝试更新主线程上的UI,您可以将代码包装到Application.Current.Dispatcher.Dispatch中。

样本代码

代码语言:javascript
复制
Application.Current.Dispatcher.Dispatch(() =>
{
    var  btn  = new Button();
    btn.Text = "Button " + count + " added";
    btn.Clicked += OnCounterClicked;
    btn.HorizontalOptions = LayoutOptions.Center;
    VLayout.Add(btn);
    
});
票数 2
EN

Stack Overflow用户

发布于 2022-05-21 06:37:04

若要在影响控件的层次结构(或位置)的更改后更新UI:

代码语言:javascript
复制
    (VLayout as IView).InvalidateArrange();

注:这大致相当于Xamarin.Forms layout.ForceLayout();

如果尚未在UI MainThread上运行的代码中,请将其包装在Dispatch中:

代码语言:javascript
复制
Dispatcher.Dispatch(() =>
    (VLayout as IView).InvalidateArrange());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72327021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档