2012-02-19 16 views
1

我正在閱讀一本Pro Silverlight 4書(http://my.safaribooksonline.com/book/programming/csharp/9781430229797/xaml/element-to-element_binding),並且我從書中做了所有例子。但綁定章節的一個例子不適用於我。我編譯後滑塊犯規移動並運行應用程序:爲什麼Pro Silverlight 4書中的這個例子不起作用?

<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> 

回答

2

戴夫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-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行中,使它們不再重疊。

0

兩個滑塊與文本塊是在網格在相同的位置(0,0)。這意味着TextBlock會直接顯示在Slider上方,因此任何鼠標事件都將始終由TextBlock捕獲,而不是Slider。這隱含地暗示着TextBlock具有更高的Z-索引,通過在網格中被定義爲第二。如果您重新安排Grid並將Grid.Row="1"Grid.Column="1"應用於TextBlock,以便它位於Slider控件旁邊,則應該能夠成功使用Slider。

相關問題