为什么Pro Silverlight 4书中的这个例子不起作用?
我正在读一本支持Silverlight 4的书(http://my.safaribooksonline.com/book/programming/csharp/9781430229797/xaml/element-to-element_binding),我做了书中所有的例子。但是绑定一章中的一个例子对我不起作用。编译并运行应用程序后,滑块不会移动:为什么Pro Silverlight 4书中的这个例子不起作用?,silverlight,Silverlight,我正在读一本支持Silverlight 4的书(http://my.safaribooksonline.com/book/programming/csharp/9781430229797/xaml/element-to-element_binding),我做了书中所有的例子。但是绑定一章中的一个例子对我不起作用。编译并运行应用程序后,滑块不会移动: <UserControl x:Class="SilverlightApplication14.MainPage" xmlns="http://
<UserControl
x:Class="SilverlightApplication14.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400">
<Grid
x:Name="LayoutRoot"
Background="White">
<Slider
x:Name="sliderFontSize"
Margin="3"
Minimum="1"
Maximum="40"
Value="10"></Slider>
<TextBlock
Margin="10"
Text="Simple Text"
x:Name="lblSampleText"
FontSize="{Binding ElementName=sliderFontSize, Path=Value}"></TextBlock>
</Grid>
滑块和文本块都位于网格中的相同位置(0,0)。这意味着TextBlock直接显示在滑块顶部,因此任何鼠标事件都将始终由TextBlock而不是滑块捕获。这是隐含的,因为TextBlock通过在网格中第二个位置定义而具有更高的Z索引。如果重新排列网格,并将
Grid.Row=“1”或Grid.Column=“1”
应用于文本块,使其位于滑块控件旁边,则应该能够成功使用滑块。Dave S绝对正确。您可以看到Z索引问题颠倒了控件的顺序(因此TextBlock在滑块之前)-然后它会工作,因为滑块将位于TextBlock的顶部:
<Grid
x:Name="LayoutRoot"
Background="White">
<TextBlock
Margin="10"
Text="Simple Text"
x:Name="lblSampleText"
FontSize="{Binding ElementName=sliderFontSize, Path=Value}"></TextBlock>
<Slider
x:Name="sliderFontSize"
Margin="3"
Minimum="1"
Maximum="40"
Value="10"></Slider>
</Grid>
您可以在这里看到,Z索引是由XAML中控件的顺序决定的
另一种方法(或演示)是明确指定附加的属性:
<Grid
x:Name="LayoutRoot"
Background="White">
<Slider
x:Name="sliderFontSize"
Margin="3"
Minimum="1"
Maximum="40"
Value="10" Canvas.ZIndex="1"></Slider>
<TextBlock
Margin="10"
Text="Simple Text"
x:Name="lblSampleText"
FontSize="{Binding ElementName=sliderFontSize, Path=Value}"></TextBlock>
</Grid>
解决此问题的最佳方法是将元素放在不同的行中,以确保元素不会相互重叠:
<Grid
x:Name="LayoutRoot"
Background="White">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Slider Grid.Row="1"
x:Name="sliderFontSize"
Margin="3"
Minimum="1"
Maximum="40"
Value="10"></Slider>
<TextBlock
Margin="10"
Text="Simple Text"
x:Name="lblSampleText"
FontSize="{Binding ElementName=sliderFontSize, Path=Value}"></TextBlock>
</Grid>
在此示例中,TextBlock位于第0行,滑块位于第1行,因此它们不再重叠