如何取动态创建和修改PivotItem的子控件
来源:互联网 发布:网络自制剧营销 编辑:程序博客网 时间:2024/06/11 14:03
很多时候,我们使用MVVM模式创建的PivotItem的时候,主要是设置了Header,可能各个PivotItem的大体布局相同,但是局部却有差异,比如:
那么,如何得到 CanvasDetailBottum(就是底部不同的两个文字显示区域) 并且往这个Canvas里面添加UIElement呢?
这是载入数据的代码:
private void SetPivotItem()
{
mFundDetailPageData.Clear();
pivotFundDetailPage.SelectedIndex = -1;
switch (mFundDetail.mFundType)
{
case FundDetail.EFundDetailsType.EStockFund_in:
mFundDetailPageData.Add(new PivotItemViewModelFund("盘间数据", 0));
mFundDetailPageData.Add(new PivotItemViewModelFund("基金资料", 1));
break;
case FundDetail.EFundDetailsType.EStockFund_out:
mFundDetailPageData.Add(new PivotItemViewModelFund("基金资料", 0));
break;
case FundDetail.EFundDetailsType.EStockFund_money:
break;
}
pivotFundDetailPage.ItemsSource = mFundDetailPageData;
}
当LoadedPivotItem事件发生时,通过遍历PivotItem,即可取得各个内层控件:
private void pivotFundDetailPage_LoadedPivotItem(object sender, PivotItemEventArgs e)
{
PivotItem pI = e.Item;
PivotItemViewModelFund fund = mFundDetailPageData[pivotFundDetailPage.SelectedIndex];if (fund.FindAllChild(pI)) //在这里找到所有的内层控件
{
}
}
在 PivotItemViewModelFund 类定义了如何根据控件名称(控件名称,如"CanvasDetailBottum",见本文最后xaml里面的定义)得到控件:
public TextBlock StockPrice = null;
public TextBlock StockDiff = null;
public TextBlock StockChg = null;
public TextBlock StockDate = null;
public TextBlock StockTime = null;
public Image StockImageMiddle = null;
public Grid PivotItemContentDetail = null;
public Canvas CanvasImageMiddle = null;
public Canvas CanvasDetailBottum = null;
public bool mPivotItemLoaded = false; //控件载入设置完毕
internal bool FindAllChild(DependencyObject root)
{
if (mPivotItemLoaded) { return true; }
int cnt = 0;
const int cntTotal = 9;
var queue = new Queue<DependencyObject>();
queue.Enqueue(root);
while (queue.Count > 0)
{
DependencyObject current = queue.Dequeue();
for (int i = VisualTreeHelper.GetChildrenCount(current) - 1; 0 <= i; i--)
{
var child = VisualTreeHelper.GetChild(current, i);
Type myType = child.GetType();
FieldInfo[] myFieldInfo = myType.GetFields();
switch (myType.Name)
{
case "Grid":
{
Grid var = child as Grid;
if (var != null && var.Name == "PivotItemContentDetail")
{
PivotItemContentDetail = var;
cnt++;
if (mPivotItemLoaded = cnt >= cntTotal) { return true; }
}
}
break;
case "TextBlock":
{
TextBlock var = child as TextBlock;
if (var != null)
{
switch (var.Name)
{
case "StockPrice":
StockPrice = var;
cnt++;
if (mPivotItemLoaded = cnt >= cntTotal) { return true; }
break;
case "StockChg":
StockChg = var;
cnt++;
if (mPivotItemLoaded = cnt >= cntTotal) { return true; }
break;
case "StockDate":
StockDate = var;
cnt++;
if (mPivotItemLoaded = cnt >= cntTotal) { return true; }
break;
case "StockTime":
StockTime = var;
cnt++;
if (mPivotItemLoaded = cnt >= cntTotal) { return true; }
break;
case "StockDiff":
StockDiff = var;
cnt++;
if (mPivotItemLoaded = cnt >= cntTotal) { return true; }
break;
}
}
}
break;
case "Image":
{
Image var = child as Image;
if (var != null && var.Name == "StockImageMiddle")
{
StockImageMiddle = var;
cnt++;
if (mPivotItemLoaded = cnt >= cntTotal) { return true; }
}
}
break;
case "Canvas":
{
Canvas var = child as Canvas;
if (var != null)
{
switch (var.Name)
{
case "CanvasImageMiddle":
CanvasImageMiddle = var;
cnt++;
if (mPivotItemLoaded = cnt >= cntTotal) { return true; }
break;
case "CanvasDetailBottum":
CanvasDetailBottum = var;
cnt++;
if (mPivotItemLoaded = cnt >= cntTotal) { return true; }
break;
}
}
}
break;
}
queue.Enqueue(child);
}
}
return false;
}
当LoadedPivotItem事件发生后,已经取得了当前PivotItem的各个内层控件,这个时候就可以对这些控件进行任意的操作,比如调整高度,设置ImageSource,在Canvas中添加任意内层控件,这样就可以得到任意自己想要的效果了。
需要注意的是,通过thisPage的指针是无法通过控件名称得到通过Templete添加的控件的。
至此,自定义PivotItem就变得轻松且简单了:
PivotItemViewModelFund fund = mFundDetailPageData[pivotIndex]; //pivotIndex = SelectedIndex
if (fund.mPivotItemLoaded)
{
Color clr = Color.FromArgb(255, 14, 31, 53);
fund.CanvasDetailBottum.Children.Clear();
double _top = 0.0;
switch (pivotIndex)
{
case 0: //盘间数据
if (mFundDetail.mFundType == FundDetail.EFundDetailsType.EStockFund_out)
{
goto case 1;
}
else if (mFundDetail.mFundType == FundDetail.EFundDetailsType.EStockFund_in)
{
fund.CanvasDetailBottum.Children.Add(fund.CreateCanvas("开盘价:", mFundDetail.open, "昨收盘:", mFundDetail.last_close, _top, mCanvasDetailLineHeight, clr));
_top += mCanvasDetailLineHeight;
fund.CanvasDetailBottum.Children.Add(fund.CreateCanvas("最低价:", mFundDetail.low, "最高价:", mFundDetail.high, _top, mCanvasDetailLineHeight, Colors.Transparent));
_top += mCanvasDetailLineHeight;
fund.CanvasDetailBottum.Children.Add(fund.CreateCanvas("折价率:", mFundDetail.discount_rate, "成交量:", mFundDetail.Amount, _top, mCanvasDetailLineHeight, clr));
_top += mCanvasDetailLineHeight;
fund.CanvasDetailBottum.Children.Add(fund.CreateCanvas("基金净值:", mFundDetail.per_nav, "累计净值:", mFundDetail.total_nav, _top, mCanvasDetailLineHeight, Colors.Transparent));
_top += mCanvasDetailLineHeight;
fund.CanvasDetailBottum.Children.Add(fund.CreateCanvas("增长率:", mFundDetail.nav_rate + "%", "净值日期:", mFundDetail.nav_date, _top, mCanvasDetailLineHeight, clr));
}
break;
case 1: //基金资料
fund.CanvasDetailBottum.Children.Add(fund.CreateCanvas("申购:", mFundDetail.sg_stat, "赎回:", mFundDetail.sh_stat, _top, mCanvasDetailLineHeight, clr));
_top += mCanvasDetailLineHeight;
fund.CanvasDetailBottum.Children.Add(fund.CreateCanvas("基金经理:", mFundDetail.fund_manager, _top, mCanvasDetailLineHeight, Colors.Transparent));
_top += mCanvasDetailLineHeight;
fund.CanvasDetailBottum.Children.Add(fund.CreateCanvas("管理人:", mFundDetail.fund_company, _top, mCanvasDetailLineHeight, clr));
_top += mCanvasDetailLineHeight;
fund.CanvasDetailBottum.Children.Add(fund.CreateCanvas("基金类型:", mFundDetail.jjlx, _top, mCanvasDetailLineHeight, Colors.Transparent));
_top += mCanvasDetailLineHeight;
fund.CanvasDetailBottum.Children.Add(fund.CreateCanvas("基金规模:", mFundDetail.Jjzfe, _top, mCanvasDetailLineHeight, clr));
break;
}
}
下面摘取了thisPage.xaml的部分内容:
<Grid x:Name="LayoutRoot" Background="#FF000D22"> <controls:Pivot Height="696" Name="pivotFundDetailPage" LoadedPivotItem="pivotFundDetailPage_LoadedPivotItem"> <controls:Pivot.Title> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition></ColumnDefinition> </Grid.ColumnDefinitions> <TextBlock x:Name="PageTitle" Text="基金名称" Margin="0,0,0,0" Style="{StaticResource PhoneTextTitle1Style}" Height="96" TextAlignment="Left" Grid.Column="0" /> <TextBlock HorizontalAlignment="Left" Margin="5,66,0,0" Name="textBlockStockSymbol" Text="基金代码" VerticalAlignment="Top" FontSize="20" TextAlignment="Left" Grid.Column="1" /> </Grid> </controls:Pivot.Title> <controls:Pivot.HeaderTemplate> <DataTemplate> <TextBlock Text="{Binding Path=PivotItemHeaderText}" FontSize="{StaticResource PhoneFontSizeExtraLarge}" Height="60"></TextBlock> </DataTemplate> </controls:Pivot.HeaderTemplate> <controls:Pivot.ItemTemplate> <DataTemplate> <Grid x:Name="PivotItemContentDetail" Width="490" Margin="-10,0,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"> <Grid.RowDefinitions> <RowDefinition Height="80"></RowDefinition> <RowDefinition Height="220"></RowDefinition> <RowDefinition Height="200"></RowDefinition> </Grid.RowDefinitions> <Grid Grid.Row="0" HorizontalAlignment="Left" Margin="0,0,0,0" VerticalAlignment="Top" Width="480" Background="#FF142A47"> <Grid.ColumnDefinitions> <ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition> </Grid.ColumnDefinitions> <TextBlock Name="StockPrice" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="42" Text="价格" Foreground="Red"></TextBlock> <Grid Grid.Column="1"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <TextBlock Name="StockDiff" Grid.Column="0" Grid.Row="0" FontSize="20" TextAlignment="Left" Text="涨跌额" VerticalAlignment="Center" HorizontalAlignment="Left" Foreground="Red" Visibility="Collapsed"></TextBlock> <TextBlock Name="StockChg" Grid.Column="0" Grid.Row="1" FontSize="20" TextAlignment="Left" Text="涨跌幅" VerticalAlignment="Center" HorizontalAlignment="Left" Foreground="Red"></TextBlock> <TextBlock Name="StockTime" Grid.Column="1" Grid.Row="0" FontSize="20" TextAlignment="Left" Text="时间" VerticalAlignment="Center" HorizontalAlignment="Left" Foreground="#FF3E4F62" Visibility="Collapsed"></TextBlock> <TextBlock Name="StockDate" Grid.Column="1" Grid.Row="1" FontSize="20" TextAlignment="Left" Text="日期" VerticalAlignment="Center" HorizontalAlignment="Left" Foreground="#FF3E4F62"></TextBlock> </Grid> </Grid> </Grid> <Canvas Grid.Row="1" Name="CanvasImageMiddle" Margin="0,0,0,0" Width="490"> <Image Name="StockImageMiddle" Stretch="None" VerticalAlignment="Center" HorizontalAlignment="Center"/> </Canvas> <Canvas Grid.Row="2" Margin="0,0,0,0" Name="CanvasDetailBottum" VerticalAlignment="Top" HorizontalAlignment="Left" Width="490"></Canvas> </Grid> </DataTemplate> </controls:Pivot.ItemTemplate> </controls:Pivot> </Grid>
- 如何取动态创建和修改PivotItem的子控件
- 修改 Pivot 控件的 PivotItem 标题字体大小
- 动态创建Pivot控件的PivotItem,LoadedPivotItem事件第一次不触发的问题
- 动态创建控件和取值
- 动态创建子控件
- 实现Pivot控件单个PivotItem的全屏化
- 如何动态创建控件
- 如何动态创建控件
- 动态创建的控件如何取得ClientID
- Android动态生成控件如何取值
- 动态控件的创建和使用--动态按钮
- 子对话框修改主对话框的属性和控件
- 如何动态添加子控件(动态添加TextBox控件)
- Android RelativeLayout动态修改子控件位置(可连续拖动的View)
- LayParames动态创建控件和控制相对布局的展示
- 关于动态创建子控件设置颜色注意的地方(TextView)
- 关于如何动态创建按钮控件。
- Delphi控件cxGrid 如何动态创建列?
- 使用Profiler Blocked Process Report & Alert 监控数据库Blocking
- page_to_pfn和pfn_to_page
- SQL Azure的第三方工具介绍(下)
- 观察者模式
- Jquery选择器基本介绍
- 如何取动态创建和修改PivotItem的子控件
- 条码系统配置
- [Hibernate]"column ambiguously defined"异常
- JQuery插件让图片旋转任意角度且代码极其简单
- QT程序出现Bus Error问题的调试
- 【正则表达式】(一)、正则表达式的用途
- 游戏碰撞检测
- 野人和传教士过河问题的C语言源代码
- 【ASP.NET】关于ADO.NET数据更新机制--我的理解