我正在阅读Pro Silverlight 4书(http://my.safaribooksonline.com/book/programming/csharp/9781430229797/xaml/element-to-element_binding),我从书中做了所有例子。但是绑定章节的一个例子对我不起作用。编译并运行应用程序后,滑块不会移动:
<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 :(得分:2)
<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-Index由XAML中控件的顺序决定。
绕过此(或演示)的另一种方法是明确指定Z-Index附加属性:
<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行,因此它们不再重叠。
答案 1 :(得分:0)
Slider和TextBlock都在Grid中的相同位置(0,0)。这意味着TextBlock将直接显示在Slider顶部,因此任何鼠标事件将始终由TextBlock捕获,而不是Slider。这是隐含暗示的,因为TextBlock通过在Grid中定义第二个而具有更高的Z-Index。如果您重新排列网格并将Grid.Row="1"
或Grid.Column="1"
应用于TextBlock,使其位于Slider控件旁边,您应该能够成功使用Slider。