我試圖實現一個自定義的多頁對話框,它需要任意數量的圖形(幻燈片)並顯示它們。期望的行爲將是所選項目將出現在前景中顯示區域的頂部中心。前一張幻燈片將在左下角具有較低的Z指數,下一張幻燈片將在右下角具有較低的Z指數。 「上一個」和「下一個」按鈕將設置選定的索引。在索引的設置方法中,我循環播放幻燈片,並根據每張幻燈片是隱藏的,選定的,在選定的幻燈片之前,還是在選定的幻燈片之後,設置一個名爲「SelectionState」的整數值。我試圖使用IValueConverters根據此整數定位幻燈片。WPF XAML自定義列表框不能正確定位元素
對於我的Listbox.ItemsPanelTemplate,我嘗試使用網格。在ItemsTemplate中,我使用IValueConverters設置了Grid.Column和Grid.Row。通過代碼,我可以看到值轉換器正在被調用,並且它們正在返回適當的值,但所有項目都出現在行0,列0中。
在感到沮喪之後,我嘗試將網格更改爲Canvas並設置Canvas.Left和Canvas.Top屬性,並且再次看到我從轉換器中獲得了很好的值,但是所有項都定位無論如何,在左上角。 (此代碼顯示,但已註釋掉)
由於我知道值轉換器的行爲與預期的一樣,其他人是否看到我在做什麼錯?提前感謝您的任何建議!
<Grid x:Name="DialogLayer">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="420" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="1100" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ListBox x:Name="lbSlides" ItemsSource="{Binding CurrentFormSet.InterviewSlides}" Grid.Column="1" Grid.Row="1" ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Hidden">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="250" />
<ColumnDefinition Width="250" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="250" />
<ColumnDefinition Width="250" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="60" />
<RowDefinition Height="300" />
<RowDefinition Height="60" />
</Grid.RowDefinitions>
</Grid>
<!--<Canvas Grid.Row="1" Grid.Column="1" />-->
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<!--<Border BorderBrush="Black" BorderThickness="1" Width="600" Height="360" Canvas.Top="{Binding SelectionState, Converter={StaticResource SelectionStateToCanvasTopConverter}}" Canvas.Left="{Binding SelectionState, Converter={StaticResource SelectionStateToCanvasLeftConverter}}" Panel.ZIndex="{Binding SelectionState, Converter={StaticResource SelectionStateToZIndexConverter}}">
<TextBlock Text="Hello World" />
</Border>-->
<Border BorderBrush="Black" BorderThickness="1" Width="600" Height="360" Grid.Column="{Binding SelectionState, Converter={StaticResource SelectionStateToGridColumnConverter}}" Grid.Row="{Binding SelectionState, Converter={StaticResource SelectionStateToGridRowConverter}}" Panel.ZIndex="{Binding SelectionState, Converter={StaticResource SelectionStateToZIndexConverter}}">
<TextBlock Text="Hello World" />
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
太謝謝你了!我知道我必須錯過簡單的東西。 –