簡體   English   中英

訂單控件的XAML列表框樣式覆蓋控件模板

[英]XAML Listbox Style Override Control Template for Order Controls

我看到的大多數教程和問題都涉及重新設置列表框的外觀,以使其看起來與眾不同,但我有興趣添加其他控件以使其具有不同的行為。 我最初開始嘗試使列表構建器控件脫離復選框列表,但發現自己太深了。 我決定進行抽象,並從一個較小的問題開始。

為了更好地理解其工作原理,我首先要做的是在控件旁邊添加“向上”和“向下”按鈕。 我認為這一切都可以在xaml中完成,因此請嘗試向自己施加壓力,堅持我在Kaxaml中工作。

列表中的項目可以使用向上和向下按鈕進行重新排序。

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Page.Resources>
  <!-- ListBox Order Button Style 
          Col 1
            Listbox
          Col 2
            Buttons Up and Down
  -->
    <Style x:Key="{x:Type ListBox}" TargetType="{x:Type ListBox}">
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="{x:Type ListBox}">
            <Grid>
              <Grid.ColumnDefinitions>
              <ColumnDefinition Width="150"/>
              <ColumnDefinition Width="100"/>
              </Grid.ColumnDefinitions>
              <Grid Grid.Column="0">
                <Rectangle Fill="Yellow"/>
                <!--<ListBox></ListBox>-->
              </Grid>
              <StackPanel Grid.Column="1">
                <Button>Up</Button>
                <Button>Down</Button>
              </StackPanel>
            </Grid>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>

  </Page.Resources>
  <Grid>  
  <ListBox>
    <TextBlock>Value 1</TextBlock>
    <TextBlock>Value 2</TextBlock>
    <TextBlock>Value 3</TextBlock>
    <TextBlock>Value 4</TextBlock>
  </ListBox>
  </Grid>
</Page>

我目前掛在一些事情上。

1)當我嘗試使用黃色矩形所在的列表框時,我開始遇到無限循環問題。

2)我不確定如何將按鈕連接到列表框。 我認為觸發器是答案,但是我對它們沒有太多經驗。

您可以通過不依賴TargetType來應用樣式來解決無限循環。 而是通過命名鍵(即{x:Type Listbox}以外的名稱)顯式應用樣式。 這樣,僅當您明確希望應用樣式時,才應用樣式。

可以通過多種方式“連接”按鈕。 最簡單的方法是處理Button.Click事件並在那里執行所需的任何操作。

話雖如此,我認為您正在以錯誤的方式進行操作。 ListBox成為ListBox ; 不要試圖將其變成不是。 如果您想要一個可重用的控件,該ListBoxListBox周圍添加功能,例如用於控制ListBox內容的按鈕,則可能應該編寫UserControl ,它實際上是一個由所需UserControl組成的復合控件。

這樣做將使您對控件的外觀有更多的控制。 您還將有機會在控件上聲明依賴項屬性,這些屬性正是控件需要支持的特定屬性(某些事情您不能僅使用Style )。 是的,這還意味着您必須通過UserControl中的新屬性公開包含的元素的屬性,這些新屬性可以有效地委派給包含的元素,但這只是為了以靈活性和相對簡單的方式創建UserControl付出的代價。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM