专注于列表框中的第一个元素

时间:2016-09-01 17:16:59

标签: c# wpf mvvm

我正面临以下问题。当我从具有键盘焦点的列表框中删除第一个元素时(通过刷新项目源),键盘焦点将移动到父窗口。我想将键盘焦点保留在第一个列表框项目上。所以我想出了以下代码

<Grid.Resources>
<Style TargetType="{x:Type ListBox}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding FirstRowDeleted}" Value="True">
            <Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=MyListBox}" />
        </DataTrigger>
    </Style.Triggers>
</Style>

使用此代码,我可以将焦点移动到列表框本身。如何将焦点移动到第一个列表框项? MyListBox [0]似乎不起作用。有什么建议吗?

感谢你 Kaddy

2 个答案:

答案 0 :(得分:0)

我在这里找到答案:How do you programmatically set focus to the SelectedItem in a WPF ListBox that already has focus?

var listBoxItem = (ListBoxItem) MainListBox
    .ItemContainerGenerator
    .ContainerFromItem(MainListBox.SelectedItem);
listBoxItem.Focus();

感谢@Jeff的回答。

答案 1 :(得分:-1)

此代码在页面加载时将焦点功能应用于第一个输入文本。试试吧

class Makine : #This is where i def my printing machine class#

    def __init__(self):
        self.murekkep=100 #this means ink#
        self.şarj=100  #this means charge
        self.devir=0    #this means how many turns did machine worked#
        self.mevcutDergi=[]  #this means list of printed magazines#

    def calis(self): #this means the work function for machine#
        if self.murekkep>=10 and self.şarj>=5:
            print("Makine çalışıyor.")
            self.murekkep-=10
            self.şarj-=5
            self.devir+=1
        elif self.murekkep<10 :
            print("Yetersiz mürekkep!")
        elif self.şarj<5 :
            print("Yetersiz şarj!")
        elif self.devir==10 :
            a=input()
            print("Yeni dergi çıktı!\nDerginin adı : "+ a)
            mevcutDergi.append(a)
            self.devir = 0

    def murekkepDoldur(self):  #this means add ink function#
        if self.murekkep<=80:
            self.murekkep+=20
            print("Mürekkep dolduruldu!\nYeni mürekkep seviyesi yüzde 
",self.murekkep)

    def şarjDoldur(self): #this means charge battery function#
        if self.şarj<=95:
            self.şarj+=5
            print("Şarj dolduruldu!\nYeni şarj seviyesi yüzde 
",self.şarj)

    def mevcutDurum(self):  #this means show status function#
        print("Makinenin murekkebi % ",self.murekkep, 
              "\nMakinenin şarjı % ", self.şarj,
              "\nMakinenin devir sayısı : " ,self.devir,
              "\nMevcut dergiler : ",self.mevcutDergi)
makine1=Makine                    
while True :
    print("-"*30)
    print("Matbaa Makinesi v0.1\n",
          "Makineyi çalıştırmak için->1\n",
          "Murekkep doldurmak için->2\n",
          "Şarj doldurmak için->3\n",
          "Mevcut durumu öğrenmek için->4")
    print("-"*30)
    komut = int(input())
    if komut==1:
        makine1.calis()
    elif komut==2:
        makine1.murekkepDoldur()
    elif komut==3:
        makine1.şarjDoldur()
    elif komut==4:
        makine1.mevcutDurum()
    else :
        print("Hatalı komut girdiniz!")