我尝试自定义一个.Net垂直进度条(使用Visual 2010),代码如下:
<ProgressBar Name="VolumeMeter" Orientation="Vertical" Margin="4,30,0,0" Value="50" HorizontalAlignment="Left" VerticalAlignment="Top" Height="300" Width="10">
<ProgressBar.Template>
<ControlTemplate TargetType="ProgressBar">
<Border BorderBrush="Green" BorderThickness="1">
<Grid Name="PART_Track" Background="Red">
<Rectangle Name="PART_Indicator" Fill="Blue"/>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="Orientation" Value="Horizontal">
<Setter TargetName="PART_Indicator" Property="VerticalAlignment" Value="Stretch"/>
<Setter TargetName="PART_Indicator" Property="HorizontalAlignment" Value="Left"/>
</Trigger>
<Trigger Property="Orientation" Value="Vertical">
<Setter TargetName="PART_Indicator" Property="VerticalAlignment" Value="Bottom"/>
<Setter TargetName="PART_Indicator" Property="HorizontalAlignment" Value="Stretch"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</ProgressBar.Template>
</ProgressBar>
字符串
但是,它没有显示出进展,怎么了?
3条答案
按热度按时间jecbmhm31#
您可能遇到的问题是.Net 4.0中的一个 * 破坏性更改 * 的结果,该更改是尝试提高WPF ProgressBar控件性能的结果。(不可否认,这是它非常需要的东西。)参考this issue。
简短版本:在.Net 3.5及更早版本中,您可以编写进度条,并且它足够智能,可以自行调整垂直或水平方向。在.Net 4.0中,你 * 必须 * 将进度条设计成水平的,然后使用触发器和转换将其旋转到垂直方向(当方向是垂直的)。如果你使用的是.Net 4.0(我怀疑你是),这就是为什么你不可能让你的进度条按照你期望的方式运行。
可惜的是,这在MSDN中的记录非常糟糕。值得注意的是,http://msdn.microsoft.com/en-us/library/ms750638.aspx的示例没有提到这一点,也没有以任何方式解决这一问题。同样,ProgressBar文档本身(http://msdn.microsoft.com/en-us/library/system.windows.controls.progressbar.aspx)也没有记录与演示基础的先前版本相比的这一突破性变化。感谢上帝提交的bug,否则我(也)会认为我疯了。
正确的方法是这样的:
字符串
g6ll5ycj2#
从你的xaml,它看起来像你没有绑定到任何东西。你必须有一些东西告诉它更新进度,通常你会把它绑定到你的数据模型上的东西,或者在你的代码背后有一些方法来做这件事。
xvw2m8pv3#
例如:第一个月