for(int i = 0; i < stackPanel.Children.Count; i++)
{
stackPanel.Children.Remove(stackPanel.Children[i]);
}
int x = stackPanel.Children.Count();
运行上面的代码后。控件仍在屏幕上。然后x等于33.那么我该如何真正删除孩子呢?
答案 0 :(得分:1)
stackPanel.Children
会返回UIElementCollection,因此您可以像这样使用import React, { Component } from 'react';
import { ProgressViewIOS, ProgressBarAndroid, Platform } from 'react-native';
import { colors } from '~/utils/styles'
export default class ProgressBar extends Component {
constructor(props){
super(props)
this.state = {
start: props.start || 0,
distance: props.distance,
};
}
componentDidMount(){
setTimeout(()=>{
this.updateProgress()
}, 100)
}
updateProgress = () => {
var start = this.state.start + 0.01;
this.setState({ start });
if(start < this.state.distance){
requestAnimationFrame(() => this.updateProgress());
}
}
componentWillUnmount(){
clearTimeout(this.updateProgress)
}
render () {
if(Platform.OS === 'ios'){
return (
<ProgressViewIOS
progress={this.state.start}
style={{height: 3}}
progressViewStyle={'bar'}
progressTintColor={this.props.progressTintColor}
/>
)
}
if(Platform.OS === 'android'){
return (
<ProgressBarAndroid
indeterminate={false}
styleAttr="Horizontal"
color={this.props.progressTintColor || colors.defaultBlue}
progress={this.state.start}
style={{height: 5}}
/>
)
}
return null
}
}
:
Clear()
答案 1 :(得分:1)
如果没有好的Minimal, Complete, and Verifiable code example,就无法确切知道代码的作用,请不要介意确切地解释其行为。
但是,这里有一些观察结果:
i
为0时,删除第一个孩子。但这样做会导致第二个孩子成为第一个孩子。然后你增加i
。所以下次循环时,你不会删除最初的第二个孩子,你删除原来是第三个孩子的东西。等等。0
处删除第一个子项,直到集合为空。无论哪种方式,您还可以使用RemoveAt()
方法提高效率,该方法删除特定索引处的元素,而不是强制集合搜索直到找到元素。Clear()
方法。因此,如果您想一次删除所有元素,您可以使用它而不是自己编写循环。UIElementCollection
你自己。如果你有这样的动态元素,你应该创建一个视图模型类来表示StackPanel
中的每个元素,创建该类的实例并将它们添加到例如ObservableCollection<T>
,然后将该集合绑定到使用ItemsSource
作为ItemsControl
StackPanel
ItemsPanel
ItemsControl
的{{1}} while
默认情况下)。答案 2 :(得分:0)
你能解释为什么不能一个一个地删除它们吗?
因为您正在修改迭代的同一个集合。因此,当你删除索引0处的元素然后将循环变量增加到1时,索引0处的新项将永远不会被删除。
你可以通过向后迭代来解决这个问题。这有效:
for (int i = stackPanel.Children.Count - 1; i >= 0; i--)
{
stackPanel.Children.Remove(stackPanel.Children[i]);
}
int x = stackPanel.Children.Count;
或者您可以按照@StanleyS的建议调用stackPanel.Clear()
方法。