Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Fabian E.
Thema: Headerwidth in Listview automatisch vergrößeren
Am im Forum: GUI: WPF und XAML

Hallo,

ich benutze ein ListView mit einem GridView als View.

XAML:


<ListView ItemsSource="{Binding Path=Logs.NormalLog}">
                                    <ListView.View>
                                        <GridView>
                                            <!--Timestamp-->
                                            <GridViewColumn Header="Timestamp"
                                                            Width="Auto">
                                                <GridViewColumn.CellTemplate>
                                                    <DataTemplate DataType="{x:Type M10LogFramework:M10LogMessage}">
                                                        <TextBlock Text="{Binding Timestamp}"
                                                                   Foreground="{Binding LogState,Mode=OneWay,Converter={StaticResource logStateConverter}}" />
                                                    </DataTemplate>
                                                </GridViewColumn.CellTemplate>
                                            </GridViewColumn>

                                            <!--Modul-->
                                            <GridViewColumn Header="Modul"
                                                            Width="Auto">
                                                <GridViewColumn.CellTemplate>
                                                    <DataTemplate DataType="{x:Type M10LogFramework:M10LogMessage}">
                                                        <TextBlock Text="{Binding Modul}"
                                                                   Foreground="{Binding LogState,Mode=OneWay,Converter={StaticResource logStateConverter}}" />
                                                    </DataTemplate>
                                                </GridViewColumn.CellTemplate>
                                            </GridViewColumn>

                                            <!--Text-->
                                            <GridViewColumn Header="Text" Width="Auto">
                                                <GridViewColumn.CellTemplate>
                                                    <DataTemplate DataType="{x:Type M10LogFramework:M10LogMessage}">
                                                        <TextBlock Text="{Binding Message}"
                                                                   Foreground="{Binding LogState,Mode=OneWay,Converter={StaticResource logStateConverter}}" />
                                                    </DataTemplate>
                                                </GridViewColumn.CellTemplate>
                                            </GridViewColumn>
                                        </GridView>
                                    </ListView.View>
                                </ListView>


Wie man sieht, habe ich die Width Property der Header auf Auto gesetzt. Beim hinzufügen des ersten Elements zu der ItemsSource passt sich der Header auch wie gewünscht auf die länge des Inhaltes an.
Danach allerdings nicht mehr. Der Header behält die Größe des ersten Elements immer bei.

Manchmal nimmt der header auch nicht die Größe des ersten sondern eines anderen Elements an, allerdings nicht die, des größten...

Wäre es sinnvoll die Width Property des Textblockes an die der GridViewColumn zu binden? Oder gibt es eine offensichtlichere Lösung?

Thema: Binding auf null-Object
Am im Forum: GUI: WPF und XAML

Oh. Na dann werde ich jetzt mal ganz schnell ganz viele DPs umändern :) Danke :)

Thema: Binding auf null-Object
Am im Forum: GUI: WPF und XAML

Okay, also das Ändern von XmlErrors von einer DP zu einer Property mit INotifyPropertyChanged hat geholfen, jetzt klappt es.

Kann mir jetzt vielleicht noch einer erklären, warum es mit einer DP nicht geht? Wäre echt gut zu wissen :)

Thema: Binding auf null-Object
Am im Forum: GUI: WPF und XAML

Achso, CurrentDocument ist natürlich auch eine DP:

public static readonly DependencyProperty CurrentDocumentProperty =
            DependencyProperty.Register("CurrentDocument", typeof(M10Document), typeof(WorkspaceViewModel), new PropertyMetadata(CurrentDocumentChanged));

Vor dem Aufruf von IntializeComponent() Sind alle Objekte bis Workspace erstellt. Der Rest (CurrentDocument und XMLErrors) ist null.

Workspace ist keine DP, sollte aber auch nicht erforderlich sein, Workspace wechselt nicht und ist vor InitializeComponent() schon vorhanden.

Thema: Binding auf null-Object
Am im Forum: GUI: WPF und XAML

XMLErrors ist eine DependencyProperty.
Definition:

public static readonly DependencyProperty XmlErrorsProperty =
            DependencyProperty.Register("XmlErrors", typeof(ObservableCollection<M10XmlError>), typeof(M10Document));

Macht das in diesem Fall einen Unterschied zu INotify?

Thema: Binding auf null-Object
Am im Forum: GUI: WPF und XAML

Hallo,
ich habe gerade ein kleines Binding Problem.
Folgendes Binding:

<ListView ItemsSource="{Binding Workspace.CurrentDocument.XmlEditorViewModel.XmlErrors}">

Klappt prinzipiell auch, Problem ist allerdings, dass zum Zeitpunkt von InitializeComponent() CurrentDocument == null ist.
Daher kommt kein Binding zustande. Das Output zeigt keine Fehler, trotzdem funktioniert es nicht.
Selbstverständlich soll es nur funktionieren, wenn CurrentDocument NICHT mehr null ist.

Gibt es eine Möglichkeit, dem Control mitzuteilen, dass es sein Binding nochmal 'überprüfen' oder neu erstellen soll?

Oder kann man gar nicht auf etwas binden, das null ist?

Thema: UI-beschreibende Dateien in WPF zeichnen lasen
Am im Forum: GUI: WPF und XAML

Also, ItemsControl + Canvas als ItemsPanel zeigt mir zumindest mal das oberste Element an.
Allerdings auch NUR das oberste Element. Alle CHilds werden trotz HierarchicalDataTemplate und gesetzter ItemsSource ignoriert. Ich denke ein normales ItemsControl kann villeicht mit einem HierarchicalDataTemplate nichts anfangen?

Alternativ könnte ich natürlich auch die Hierachie über den haufen werfen und per Hand für jedes Element im Code ein Image erstellen und hinzufügen. Super schön wäre das allerdings nicht...

Hier mein bisheriges XAML:


<ItemsControl Margin="2"
                          Width="400"
                          Height="400"
                          HorizontalAlignment="Center"
                          VerticalAlignment="Center"
                          DataContext="{Binding ElementName=dockWindow}"
                          ItemsSource="{Binding FileViewModel.Scenes}">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <Canvas HorizontalAlignment="Stretch"
                                VerticalAlignment="Stretch" />
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
                <ItemsControl.ItemTemplate>
                    <HierarchicalDataTemplate DataType="{x:Type FxViewModels:FxSceneObjectViewModel}"
                                              ItemsSource="{Binding Childs}">
                        <Rectangle Width="{Binding ID}"
                                   Height="30"
                                   Fill="AliceBlue"/>
                    </HierarchicalDataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>

Width des Rectangle ist auf ID gebunden, damit ich feststellen kann, ob mehrere Rectangles angezeigt werden.

Thema: UI-beschreibende Dateien in WPF zeichnen lasen
Am im Forum: GUI: WPF und XAML

Wäre es vielleicht möglich das gnaze über eine Listbox mit einem Canvas als ItemsPanel zu lösen? Das sollte doch dann alle Elemente genau übereinander zeichnen, oder?

Eigentlich benötige ich ein Stackpanel, das in Z-Richtung stapelt :)

Thema: UI-beschreibende Dateien in WPF zeichnen lasen
Am im Forum: GUI: WPF und XAML

Also direkt als XAML geht nicht, konvertieren klingt aber interessant. Werde mich da mal etwas schlau machen.

Um das ganz etwas weniger abstract zu machen hier mal ein kleiner Ausschnitt aus dem XML:


<FxContainer Name="Screen">
      <Properties>
        <Property Name="Name">
          <String>Screen</String>
        </Property>
        <Property Name="Visible">
          <Bool>True</Bool>
        </Property>
        <Property Name="Top">
          <Float>-1</Float>
        </Property>
        <Property Name="ID">
          <Int>-1</Int>
        </Property>
        <Property Name="Position">
          <Array>
            <Float>0</Float>
            <Float>0</Float>
            <Float>0</Float>
          </Array>
        </Property>
        <Property Name="CenterScale">
          <Array>
            <Float>1</Float>
            <Float>1</Float>
            <Float>1</Float>
          </Array>
        </Property>
        <Property Name="Opacity">
          <Float>1</Float>
        </Property>
        <Property Name="Offset">
          <Array>
            <Float>0</Float>
            <Float>0</Float>
            <Float>0</Float>
          </Array>
        </Property>
        <Property Name="Scale">
          <Array>
            <Float>1</Float>
            <Float>1</Float>
            <Float>1</Float>
          </Array>
        </Property>
        <Property Name="Size">
          <Array>
            <Int>470</Int>
            <Int>800</Int>
          </Array>
        </Property>
      </Properties>
      <Scenes>
        <FxContainer Name="folder">
          <Properties>
            <Property Name="Name">
              <String>folder</String>
            </Property>
            <Property Name="Visible">
              <Bool>True</Bool>
            </Property>
            <Property Name="Top">
              <Float>0</Float>
            </Property>
            <Property Name="ID">
              <Int>0</Int>
            </Property>
            <Property Name="Position">
              <Array>
                <Float>235</Float>
                <Float>400</Float>
                <Float>0</Float>
              </Array>
            </Property>
            <Property Name="CenterScale">
              <Array>
                <Float>1</Float>
                <Float>1</Float>
                <Float>1</Float>
              </Array>
            </Property>
            <Property Name="Opacity">
              <Float>1</Float>
            </Property>
            <Property Name="Offset">
              <Array>
                <Float>-235</Float>
                <Float>-327</Float>
                <Float>0</Float>
              </Array>
            </Property>
            <Property Name="Scale">
              <Array>
                <Float>1</Float>
                <Float>1</Float>
                <Float>1</Float>
              </Array>
            </Property>
            <Property Name="Size">
              <Array>
                <Int>470</Int>
                <Int>654</Int>
              </Array>
            </Property>
          </Properties>
          <Scenes />
        </FxContainer>
        <FxContainer Name="DropArea">
          <Properties>
            <Property Name="Name">
              <String>DropArea</String>
            </Property>
            <Property Name="Visible">
              <Bool>True</Bool>
            </Property>
            <Property Name="Top">
              <Float>0</Float>
            </Property>
            <Property Name="ID">
              <Int>1</Int>
            </Property>
            <Property Name="Position">
              <Array>
                <Float>235</Float>
                <Float>400</Float>
                <Float>0</Float>
              </Array>
            </Property>
            <Property Name="CenterScale">
              <Array>
                <Float>1</Float>
                <Float>1</Float>
                <Float>1</Float>
              </Array>
            </Property>
            <Property Name="Opacity">
              <Float>1</Float>
            </Property>
            <Property Name="Offset">
              <Array>
                <Float>-265</Float>
                <Float>-374</Float>
                <Float>0</Float>
              </Array>
            </Property>
            <Property Name="Scale">
              <Array>
                <Float>1</Float>
                <Float>1</Float>
                <Float>1</Float>
              </Array>
            </Property>
            <Property Name="Size">
              <Array>
                <Int>470</Int>
                <Int>654</Int>
              </Array>
            </Property>
          </Properties>
          <Scenes />
        </FxContainer>
        <FxContainer Name="item">
          <Properties>
            <Property Name="Name">
              <String>item</String>
            </Property>
            <Property Name="Visible">
              <Bool>True</Bool>
            </Property>
            <Property Name="Top">
              <Float>0</Float>
            </Property>
            <Property Name="ID">
              <Int>2</Int>
            </Property>
            <Property Name="Position">
              <Array>
                <Float>235</Float>
                <Float>400</Float>
                <Float>0</Float>
              </Array>
            </Property>
            <Property Name="CenterScale">
              <Array>
                <Float>1</Float>
                <Float>1</Float>
                <Float>1</Float>
              </Array>
            </Property>
            <Property Name="Opacity">
              <Float>1</Float>
            </Property>
            <Property Name="Offset">
              <Array>
                <Float>-235</Float>
                <Float>-327</Float>
                <Float>0</Float>
              </Array>
            </Property>
            <Property Name="Scale">
              <Array>
                <Float>1</Float>
                <Float>1</Float>
                <Float>1</Float>
              </Array>
            </Property>
            <Property Name="Size">
              <Array>
                <Int>470</Int>
                <Int>654</Int>
              </Array>
            </Property>
          </Properties>
          <Scenes />
        </FxContainer>
        <FxContainer Name="timeline.Tip_Bubbles_Main">
          <Properties>
            <Property Name="Name">
              <String>timeline.Tip_Bubbles_Main</String>
            </Property>
            <Property Name="Visible">
              <Bool>True</Bool>
            </Property>
            <Property Name="Top">
              <Float>0</Float>
            </Property>
            <Property Name="ID">
              <Int>3</Int>
            </Property>
            <Property Name="Position">
              <Array>
                <Float>265</Float>
                <Float>480</Float>
                <Float>0</Float>
              </Array>
            </Property>
            <Property Name="CenterScale">
              <Array>
                <Float>1</Float>
                <Float>1</Float>
                <Float>1</Float>
              </Array>
            </Property>
            <Property Name="Opacity">
              <Float>1</Float>
            </Property>
            <Property Name="Offset">
              <Array>
                <Float>-265</Float>
                <Float>-480</Float>
                <Float>0</Float>
              </Array>
            </Property>
            <Property Name="Scale">
              <Array>
                <Float>1</Float>
                <Float>1</Float>
                <Float>1</Float>
              </Array>
            </Property>
            <Property Name="Size">
              <Array>
                <Int>530</Int>
                <Int>960</Int>
              </Array>
            </Property>
          </Properties>
          <Scenes>
            <FxContainer Name="hitbox.Tip_bubbles_01">
              <Properties>
                <Property Name="Name">
                  <String>hitbox.Tip_bubbles_01</String>
                </Property>
                <Property Name="Visible">
                  <Bool>True</Bool>
                </Property>
                <Property Name="Top">
                  <Float>0</Float>
                </Property>
                <Property Name="ID">
                  <Int>0</Int>
                </Property>
                <Property Name="Position">
                  <Array>
                    <Float>10</Float>
                    <Float>300</Float>
                    <Float>0</Float>
                  </Array>
                </Property>
                <Property Name="CenterScale">
                  <Array>
                    <Float>5.1</Float>
                    <Float>1.1</Float>
                    <Float>1</Float>
                  </Array>
                </Property>
                <Property Name="Opacity">
                  <Float>1</Float>
                </Property>
                <Property Name="Offset">
                  <Array>
                    <Float>0</Float>
                    <Float>-30</Float>
                    <Float>0</Float>
                  </Array>
                </Property>
                <Property Name="Scale">
                  <Array>
                    <Float>1</Float>
                    <Float>1</Float>
                    <Float>1</Float>
                  </Array>
                </Property>
              </Properties>
              <Scenes />
            </FxContainer>
            <FxContainer Name="text.label_01">
              <Properties>
                <Property Name="Name">
                  <String>text.label_01</String>
                </Property>
                <Property Name="Visible">
                  <Bool>True</Bool>
                </Property>
                <Property Name="Top">
                  <Float>0</Float>
                </Property>
                <Property Name="ID">
                  <Int>1</Int>
                </Property>
                <Property Name="Position">
                  <Array>
                    <Float>235</Float>
                    <Float>310</Float>
                    <Float>0</Float>
                  </Array>
                </Property>
                <Property Name="CenterScale">
                  <Array>
                    <Float>0.9</Float>
                    <Float>0.9</Float>
                    <Float>1</Float>
                  </Array>
                </Property>
                <Property Name="Offset">
                  <Array>
                    <Float>0</Float>
                    <Float>-10</Float>
                    <Float>0</Float>
                  </Array>
                </Property>
                <Property Name="Scale">
                  <Array>
                    <Float>1</Float>
                    <Float>1</Float>
                    <Float>1</Float>
                  </Array>
                </Property>                
              </Properties>
              <Scenes />
            </FxContainer>
            <FxContainer Name="message_no_arrow.9.png">
              <Properties>
                <Property Name="Name">
                  <String>message_no_arrow.9.png</String>
                </Property>
                <Property Name="Visible">
                  <Bool>True</Bool>
                </Property>
                <Property Name="Top">
                  <Float>0</Float>
                </Property>
                <Property Name="ID">
                  <Int>2</Int>
                </Property>
                <Property Name="Position">
                  <Array>
                    <Float>235</Float>
                    <Float>300</Float>
                    <Float>0</Float>
                  </Array>
                </Property>
                <Property Name="CenterScale">
                  <Array>
                    <Float>4.2</Float>
                    <Float>0.9649122</Float>
                    <Float>1</Float>
                  </Array>
                </Property>
                <Property Name="Offset">
                  <Array>
                    <Float>-57</Float>
                    <Float>-57</Float>
                    <Float>0</Float>
                  </Array>
                </Property>
                <Property Name="Scale">
                  <Array>
                    <Float>1</Float>
                    <Float>1</Float>
                    <Float>1</Float>
                  </Array>
                </Property>
              </Properties>
              <Scenes />
            </FxContainer>
            <FxContainer Name="hitbox.Tip_bubbles_02">
              <Properties>
                <Property Name="Name">
                  <String>hitbox.Tip_bubbles_02</String>
                </Property>
                <Property Name="Visible">
                  <Bool>True</Bool>
                </Property>
                <Property Name="Top">
                  <Float>0</Float>
                </Property>
                <Property Name="ID">
                  <Int>3</Int>
                </Property>
                <Property Name="Position">
                  <Array>
                    <Float>10</Float>
                    <Float>690</Float>
                    <Float>0</Float>
                  </Array>
                </Property>
                <Property Name="CenterScale">
                  <Array>
                    <Float>5.1</Float>
                    <Float>1.35</Float>
                    <Float>1</Float>
                  </Array>
                </Property>
                <Property Name="Opacity">
                  <Float>1</Float>
                </Property>
                <Property Name="Offset">
                  <Array>
                    <Float>0</Float>
                    <Float>-20</Float>
                    <Float>0</Float>
                  </Array>
                </Property>
                <Property Name="Scale">
                  <Array>
                    <Float>1</Float>
                    <Float>1</Float>
                    <Float>1</Float>
                  </Array>
                </Property>
              </Properties>
              <Scenes />
            </FxContainer>
            <FxContainer Name="text.label_02">
              <Properties>
                <Property Name="Name">
                  <String>text.label_02</String>
                </Property>
                <Property Name="Visible">
                  <Bool>True</Bool>
                </Property>
                <Property Name="Top">
                  <Float>0</Float>
                </Property>
                <Property Name="ID">
                  <Int>4</Int>
                </Property>
                <Property Name="Position">
                  <Array>
                    <Float>228</Float>
                    <Float>680</Float>
                    <Float>0</Float>
                  </Array>
                </Property>
                <Property Name="CenterScale">
                  <Array>
                    <Float>0.9</Float>
                    <Float>0.9</Float>
                    <Float>1</Float>
                  </Array>
                </Property>
                <Property Name="Offset">
                  <Array>
                    <Float>0</Float>
                    <Float>0</Float>
                    <Float>0</Float>
                  </Array>
                </Property>
                <Property Name="Scale">
                  <Array>
                    <Float>1</Float>
                    <Float>1</Float>
                    <Float>1</Float>
                  </Array>
                </Property>
              </Properties>
              <Scenes />
            </FxContainer>
            <FxContainer Name="message_port_bottom_cps.9.png">
              <Properties>
                <Property Name="Name">
                  <String>message_port_bottom_cps.9.png</String>
                </Property>
                <Property Name="Visible">
                  <Bool>True</Bool>
                </Property>
                <Property Name="Top">
                  <Float>0</Float>
                </Property>
                <Property Name="ID">
                  <Int>5</Int>
                </Property>
                <Property Name="Position">
                  <Array>
                    <Float>235</Float>
                    <Float>690</Float>
                    <Float>0</Float>
                  </Array>
                </Property>
                <Property Name="CenterScale">
                  <Array>
                    <Float>3.152</Float>
                    <Float>1.323529</Float>
                    <Float>1</Float>
                  </Array>
                </Property>
                <Property Name="Offset">
                  <Array>
                    <Float>-74</Float>
                    <Float>-51</Float>
                    <Float>0</Float>
                  </Array>
                </Property>
                <Property Name="Scale">
                  <Array>
                    <Float>1</Float>
                    <Float>1</Float>
                    <Float>1</Float>
                  </Array>
                </Property>
              </Properties>
              <Scenes />
            </FxContainer>
          </Scenes>
        </FxContainer>
      </Scenes>
    </FxContainer>

Damit das ganze nicht zu verwirrend wird, hier noch ein Screenshot von der Struktur (wird so in meinem Programm angezeigt)

Jedes in dem Screenshot angezeigtes Element soll nachher via einem Image gezeichnet werden. Ich benötige nur ein Control welches mir diese Struktur über DataTemplates verwandeln kann. Problem ist dabei aber eben, dass alle Images die selben Ursprungskoordinaten haben sollten.

Thema: UI-beschreibende Dateien in WPF zeichnen lasen
Am im Forum: GUI: WPF und XAML

Hallo,

leider ist mir kein beserer Titel für mein Problem eingefallen...

Folgendes Szenario: Ich habe eine XML-Datei. In dieser XML-Datei wird eine UI mit einer Baumstruktur beschrieben. (Ähnlich zu XAML)

Diese XML wird eingelsen und verarbeitet (zu hierachischen Objekten).
Nun würde ich gerne diese UI Struktur auch grafisch darstellen.
Alle Elemente der UI sollen nur als Rechtecke bzw. als Images dargestellt werden.

Nun bräuchte ich irgendeine Art Control welches über ItemsSource ein HierarchicalDataTemplate mit eigener ItemsSource darstellt. Allerdings müssen eben alle Childs die selben Ursprungskoordinaten besitzen.
Ich muss quasi die Möglichkeit besitzen, alle Childs exakt übereinander zu zeichnen, falls das nötig sein sollte.

Wichtig wäre eben, dass die hierachische Struktur erhalten bleibt und ich theoretisch jedes UI Element anklicken kann (Manche wäre natürlich von anderen verdeckt)

Ich hoffe irgendjemand versteht das jetzt so, wie ich das meine...

Thema: updateSystem.NET
Am im Forum: Projekte

Du kannst, falls Updates gefunden werden, jedes einzeln durchgehen und irgendwas damit anstellen.
Du musst auch nicht diesen vorgefertigten Updateweg benutzen, du könntest prinzipiell auch eine eigene GUI dafür schreiben und nur die Daten des Controllers benutzen.
Sollte zumindest so klappen.

Thema: Stretch bei Custom-Template Groupbox begrenzen
Am im Forum: GUI: WPF und XAML

Hallo,
ich habe zuzeit folgendes Problem: In einem Window mit einer Ribbonbar möchte ich mir Office-like Groupboxes für den Backstage-Bereich erstellen.
das mache ich über ein Template für die normale Groupbox.
Hier der Code dazu:

<Style x:Key="BackStageGroupStyle"
               TargetType="{x:Type GroupBox}">
            <Setter Property="HorizontalAlignment"
                    Value="Left" />
            <Setter Property="VerticalAlignment"
                    Value="Top" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type GroupBox}">
                        <Grid SnapsToDevicePixels="true">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto" />
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="Auto" />
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="*" />
                            </Grid.RowDefinitions>

                            <Label Grid.Column="0"
                                   Grid.ColumnSpan="2"
                                   Content="{TemplateBinding Header}"
                                   FontWeight="Bold"
                                   FontSize="14.667"
                                   Foreground="#FF4D4D4D"
                                   HorizontalAlignment="Left" />
                            <Line Grid.Row="1"
                                  StrokeThickness="0.5"
                                  StrokeDashArray="6,4"
                                  Stroke="#FF414141"
                                  Margin="0,0,0,10"
                                  Grid.Column="0"
                                  Grid.ColumnSpan="2"
                                  SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                  X1="{Binding RelativeSource={RelativeSource Mode=Self},Path=ActualWidth}" />
                            <ContentPresenter Grid.Column="1"
                                              Grid.Row="2"
                                              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                              Margin="15,0,0,0" />
                            <Line Grid.Column="3"
                                  Grid.Row="0"
                                  Grid.RowSpan="3"
                                  StrokeThickness="0.1"
                                  Y1="{Binding RelativeSource={RelativeSource Mode=Self},Path=ActualHeight}"
                                  Margin="6,0,12,0">
                                <Line.Stroke>
                                    <LinearGradientBrush EndPoint="0.5,1"
                                                         StartPoint="0.5,0">
                                        <GradientStop Color="#00838383"
                                                      Offset="0" />
                                        <GradientStop Color="#00BCBCBC"
                                                      Offset="1" />
                                        <GradientStop Color="#FF292929"
                                                      Offset="0.057" />
                                        <GradientStop Color="#FF313131"
                                                      Offset="0.948" />
                                    </LinearGradientBrush>
                                </Line.Stroke>
                            </Line>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

Das sieht auch schon ganz gut aus so. Ein Problem habe ich allerdings.
Wenn ich nun eine Groupbox mit diesem Style in ein Grid packe (zusammen mit ein paar anderen) und HorizontalAlignment auf "Stretch" stelle, dann stretched er mir die Groupbox über das ganze Window und interessiert sich nicht für die Größe des Grids.

Entferne ich den Style dann verählt sich die Groupbox genau wie erwartet. Sie wird genau so groß, dass sie die ganze Zelle ausfüllt, vergrößert sie aber nicht.

Wie kann ich dieses Verhalten bei meinem Style erreichen?

Thema: updateSystem.NET
Am im Forum: Projekte

Okay, dumme Frage, ich habe den Updater gerade nicht hier, wie stellt man die Sprache um? Eine einfache Property?

Englisch reicht mir :)

Thema: updateSystem.NET
Am im Forum: Projekte

Sag mal, kann ich eigentlich die Sprache des Updaters ändern? Oder eigene Übersetzungsdlls mitgeben?

Thema: "Öffnen mit"-Dialog des Windows Explorers von außen anzeigen [nicht OpenFileDialog]
Am im Forum: Rund um die Programmierung

Es gibt einfach so Tage, da fallen einem die passenden Suchbegriffe nicht ein... :(

Hast du direkt bei codeproject gesucht? Oder bei Google?

Aber vielen Dank schonmal! :)

Thema: "Öffnen mit"-Dialog des Windows Explorers von außen anzeigen [nicht OpenFileDialog]
Am im Forum: Rund um die Programmierung

Nein, kein OpenFileDialog ;)
Ehrlich gesagt ist es mir egal, WIE das ganze angezeigt wird. Hauptsache der User kann das Programm auswählen.

Das Auslesen ist leider nicht ganz so einfach, jedenfalls war es vor ein-zwei Jahren nicht.
Die Programme sind über die ganze Registry verteilt. Teilweise noch mit GUIDs codiert etc.

Habe mich damit mal länger befasst, das auszulesen, damals waren da doch einige eigene Klassen involviert ;)
Vielleicht war ich aber auch einfach zu blöd. :)

Thema: "Öffnen mit"-Dialog des Windows Explorers von außen anzeigen [nicht OpenFileDialog]
Am im Forum: Rund um die Programmierung

Hallo,
mich würde interessieren, ob es eine Mögichkeit gibt, den "Öffnen mit"-Dialog vom Windows Explorer irgendwie von außen anzeigen zu lassen.

Habe im Internet leider so gut wie gar nichts dazu gefunden, über Commandline Arguments scheint es nicht zu gehen.

Kann man das irgendwie anders lösen? (Außer selbst zu schreiben natürlich)
Gäbe es zur Not halbwegs vernünftige API-Funktionen, die mir die registrierten "Öffnen mit"-Programme ausgeben?
Oder müsste ich mir die wirklich per Hand in der Registry zusammen suchen?

Thema: Validation Rule
Am im Forum: GUI: WPF und XAML

Vielen Dank, mit IDataErrorInfo klappt das sehr gut! :)

Thema: Validation Rule
Am im Forum: GUI: WPF und XAML

Hallo,
ich habe folgenden Code:

<TextBox Grid.Row="2"
                                         Grid.Column="1"
                                         x:Name="tbxZipalignPath"
                                         Margin="2">
                                    <TextBox.Text>
                                        <Binding Path="ZipalignPath"
                                                 UpdateSourceTrigger="PropertyChanged"
                                                 ValidatesOnExceptions="True" >
                                            <Binding.ValidationRules>
                                                <ViewModel:FilePathValidationRule />
                                            </Binding.ValidationRules>
                                        </Binding>
                                    </TextBox.Text>
                                </TextBox>

Dieser sorgt dafür, dass der Text der in die Textbox geschrieben wird, immer ein gültiger Pfad sein muss.
Das klappt soweit auch schon genau wie ich das möchte. Allerdings bekommt diese Textbox über das Binding beim Start der Anwendung direkt etwas zugewiesen.
Der Wert dieser Zuweisung wird allerdings nicht überprüft. Der text steht danach in der Textbox wie es sein soll, allerdings erkennt er dann eventuell vorhandene Fehler nicht.

Gibt es eine Möglichkeit dieses Verhalten zu ermöglichen?

PS: Wie schaffe ich es eigentlich, dass formatiereter Code hier richtig dargestellt wird? Also nicht so fies versetzt.

Thema: Binding auf ObservableCollection
Am im Forum: GUI: WPF und XAML

Du könntest auch mal UpdateSourceTrigger auf "LostFocus" stellen.

Thema: Listbox Selection erzwingen
Am im Forum: GUI: WPF und XAML

Hallo,
ich habe gerade ein etwas blödes Problem.
Ich habe eine Listbox, die im Selectionchanged Event etwas Code ausführt.
In diesem Code wird unter anderem einer Textbox ein Text zugewiesen.
Dadurch wird die Selection der Listbox aber leider nicht angezeigt. Klicke ich ein weiteres mal auf den Eintrag (Text der Textbox bekommt den selben Wert wie vorher zugewiesen, ändert den Text also nicht) dann klappt alles.

Im Prinzip geht es immer dann, wenn sich der Text der Textbox nicht ändert.
Ändert er sich, dann wird die Selection nicht angezeigt, sehr wohl aber intern durchgeführt. Die geschmissenen Events stimmen alle.

Gibt es für dieses Problem eine Lösung?

Thema: Generic Type nach String-Variable bestimmen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

ich habe im Moment folgendes Problem: Je nach einem gegebenen String möchte ich eine Liste mit einer neuen Instanz einer generischen Klasse füllen.
Die scheitert allerdings daran, dass ich nicht anhand des strings den Typ der generischen Klasse bestimmen kann.

Folgender Code scheitert aus logischen Gründen:


M10Property<M10BaseType> property = null;
                                switch (dataType)
                                {
                                    case "String":
                                        property = new M10Property<M10String>(new M10String());
                                        break;
                                }

Gibt es überhaupt eine Möglichkeit irgendwie anhand dieses Strings (er kommt aus einer XML-Datei und beinhaltet eben Sachen wie Int, String, Float2, Float3 etc) zu entscheiden, welchen Typ nun meine generische Klasse übergeben bekommt?


EDIT: Was genau bekommt so eine generische Klasse eigentlich übergeben? Ist ja quasi ein Klassenname... Gibt es dafür einen Typ?

Thema: Binding schlägt fehl - Error 4
Am im Forum: GUI: WPF und XAML

Hast du vollkommen Recht, ändere den Fehlertext und du hast wieder das was bei mir steht, stammt aus zwei verschiedenen Versionen, ich habe etwas rumprobiert woran es liegen könnte.
Egal welche Property ich nehme, der Fehler bleibt der gleiche. (auf die akteulle Property bezogen)

Das scheint wohl auch ein bekanntes Problem in WPF zu sein, dieser Data Error 4.
Allerdings hatte das sonst eben keine Auswirkungen auf die Funktion und man solle den Fehler einfach ignorieren...
Hat wohl was mit ItemControls und ItemsSource zu tun oder so, ich suche noch mal den Link.

EDIT: Gefunden: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/564e7160-df70-4e95-945d-60954dd7a2ae

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/8028a46b-3080-40ad-aed2-e9417eb25381

Thema: Binding schlägt fehl - Error 4
Am im Forum: GUI: WPF und XAML

Sorry, ich meine natürlich diesen hier:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=cbxPortName'. BindingExpression:Path=SelectedIndex; DataItem=null; target element is 'Button' (Name=''); target property is 'CommandParameter' (type 'Object')

EDIT: Fehlermeldung korrigiert.

Thema: Binding schlägt fehl - Error 4
Am im Forum: GUI: WPF und XAML

Hallo,
habe gerade ein seltsames Problem: Mein stinknormales Control Binding will einfach nicht klappen.
Und zwar möchte ich das SelectedItem einer ComboBox auf den CommandParameter eines Buttons binden.
Das klappt leider nicht, es kommt der Fehler 4.
Da meine Combox per ItemsSource befüllt wird, scheint der Fehler ja erst mal in WPF selbst zu liegen (bekanntes Problem),
die ganzen Schilderungen im Internet haben aber kein Problem damit, dass das Binding dann überhaupt nicht kalppt.

Hier der Code:


<StackPanel DockPanel.Dock="Top"
                            Orientation="Horizontal">
                    <StackPanel.Resources>
                        <ObjectDataProvider x:Key="PortNames"
                                            ObjectType="{x:Type Ports:SerialPort}"
                                            MethodName="GetPortNames" />
                    </StackPanel.Resources>
                    <ComboBox x:Name="cbxPortName"
                              Margin="2"
                              DockPanel.Dock="Top"
                              ItemsSource="{Binding Source={StaticResource PortNames}}"
                              Text="Port Auswahl"
                              SelectedIndex="0" />

                    <Button Margin="2"
                            DockPanel.Dock="Top"
                            Content="Verbinden"
                            CommandParameter="{Binding ElementName=cbxPortName,Path=SelectedIndex,Mode=OneWay}"
                            Command="{Binding Source={x:Static CommandBridge:GUICommands.Firmware}, Path=InitializeFlashLibrary}" />
                </StackPanel>

Ist es wirklich schon so spät, dass ich irgendwas dummes übersehe? Als Parameter kommt immer "null" an...

Thema: Eventrouting bei UserControls
Am im Forum: GUI: WPF und XAML

Okay, das klingt ja schonmal sinnvoll.
Nur wie komme ich an diesen "Button" und dessen Click-Event ran?

Kleine Zwischenfrage, Ziel des ganzen ist es, nach dem Klick einen anderen MenuButton auszuklappen.
Über das Event ist das sehr einfach, geht das auch per XAML? Bestimmt oder?

private void TestGalleryButton_Click()
        {
            btnTestResult.IsDropDownOpen = true;
        }

Thema: Eventrouting bei UserControls
Am im Forum: GUI: WPF und XAML

Hallo,
ich beschäftige mich gerade näher mit den ganzen neuen Events in WPF und den neuen Ideen die dahinter stecken.

Das ganze verwirrt mich aber ein wenig... Ich kann nämlich nicht wirklich begreifen, wann bei welchen COntrol ein Event gefeuert wird.

Hier erst mal der Code:
UserControl:


<UserControl x:Class="RP6_Remotrol.GUI.CustomControls.TestGalleryButton"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:CustomControls="clr-namespace:RP6_Remotrol.GUI.CustomControls"
             Width="Auto"
             Height="Auto"
             MaxHeight="60"
             MaxWidth="60"
             MouseDown="UserControl_MouseDown"
             Background="Transparent"
             IsHitTestVisible="true"
             MouseUp="UserControl_MouseUp"
             PreviewMouseUp="UserControl_PreviewMouseUp">
    <Viewbox MouseUp="Viewbox_MouseUp"
             PreviewMouseUp="Viewbox_PreviewMouseUp">
        <StackPanel Orientation="Vertical"
                    MouseUp="StackPanel_MouseUp"
                    PreviewMouseUp="StackPanel_PreviewMouseUp">
            <Image Source="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type CustomControls:TestGalleryButton}}, Path=Image}"
                   MouseUp="Image_MouseUp"
                   PreviewMouseUp="Image_PreviewMouseUp" />
            <Label HorizontalContentAlignment="Center"
                   Content="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type CustomControls:TestGalleryButton}}, Path=Header}"
                   MouseUp="Label_MouseUp"
                   PreviewMouseUp="Label_PreviewMouseUp" />
        </StackPanel>
    </Viewbox>
</UserControl>

Dann die entsprechende Verwendung:

<r:RibbonGroup x:Name="grpTests"
                               Header="Selbsttest">
                    <r:RibbonGroup.Resources>
                        <ResourceDictionary>
                            <DataTemplate x:Key="testButtonTemplate">
                                <CustomControls:TestGalleryButton Header="{Binding Name}"
                                                                  Image="{Binding Image}"
                                                                  CommandParameter="{Binding TestCode}"
                                                                  Command="{x:Static cmd:GUICommands.StartTest}"
                                                                  Click="TestGalleryButton_Click" />
                            </DataTemplate>
                        </ResourceDictionary>
                    </r:RibbonGroup.Resources>
                    <r:RibbonMenuButton x:Name="btnSelfTest"
                                        Label="Test starten"
                                        LargeImageSource="Images\Large\startTest.png"
                                        IsEnabled="{Binding Source={x:Static ContentBridge:PropertyManager.RP6Status},Path=RP6Available}">

                        <r:RibbonGallery DataContext="{x:Static ContentBridge:PropertyManager.TestProperties}"
                                         PreviewMouseUp="RibbonGallery_PreviewMouseUp"
                                         MouseUp="RibbonGallery_MouseUp">
                            <r:RibbonGalleryCategory ItemsSource="{Binding TestsRP6}"
                                                     ItemTemplate="{StaticResource testButtonTemplate}"
                                                     Header="RP6"
                                                     MouseUp="RibbonGalleryCategory_MouseUp"
                                                     PreviewMouseUp="RibbonGalleryCategory_PreviewMouseUp"
                                                     MinColumnCount="4" />
                            <r:RibbonGalleryCategory ItemsSource="{Binding TestsM32}"
                                                     ItemTemplate="{StaticResource testButtonTemplate}"
                                                     Header="M32"
                                                     MinColumnCount="4" />
                            <r:RibbonGalleryCategory ItemsSource="{Binding TestsM128}"
                                                     ItemTemplate="{StaticResource testButtonTemplate}"
                                                     Header="M128"
                                                     MinColumnCount="4" />
                        </r:RibbonGallery>
                    </r:RibbonMenuButton>
                </r:RibbonGroup>

Wie man sehen kann habe ich zum Testen mal an so ziemlich allen möglichen Stellen die Events für MouseUp eingefügt.

Nun würde mich interessieren warum von all diesen Events NUR das bei der RibbonGallery und das bei der RibbonGalleryCategory gefeuert wird. Das sind beides die PreviewEvents. Auch in der richtigen Reihenfolge.

Wo werden denn all die anderen Events abgefangen und geblockt?

Achja, das MouseDown des UserControls kommt sauber, ich brauche aber eben auch das Up.
Prinzipiell könnte ich so jetzt damit arbeiten, aber komisch finde ich es trotzdem.

Liebe Grüße,
Fabian

Thema: DoubleAnimation während der Laufzeit verändern
Am im Forum: GUI: WPF und XAML

Hallo,

ich stehe gerade vor dem Problem, eine Animation zu verändern, während sie läuft.

Folgendes Szenario: Ich habe einen Zeiger (im grafischen Sinne) der animiert werden soll (-->eine Gauge).
Das klappt ja über eine DoubleAnimation auch ganz wunderbar.
Allerdings gibt es ein Problem, wenn die Gauge einen neuen Wert annehmen soll, bevor die Animation zu dem alten Wert fertig ist.

Dann wird nämlich eine neue Animation erzeugt und der Zeiger springt von der aktuellen Position der alten Animation zu der Startposition der neuen Animation. danach geht es natürlich flüssig weiter.

Ich habe das ganze auch schon auf anderem Wege versucht (Ansatz aus Winforms, mit Timer, der das ganze animiert), dabei habe ich allerdings Probleme mit Multithreading und den DependencyProperties, was dann in der Folge zu massiven Performanceeinbußen beim Synchronisieren der Threads (GUI-Thread und Timer-Thread) führt.
Aber immerhin klappt es dann so wie ich das will.

Daher nun auch meine Frage: Gibt es eine Möglichkeit, eine laufende Animation so zu verändern, dass sie flüssig weiter läuft, auch wenn sich quasi die "Richtiung" ändert? Kann ich irgendwie den aktuellen Wert der Animation sauber abgreifen?
Direkt über die zu animierende DP?

Thema: Verwendung von INotifyPropertyChanged
Am im Forum: GUI: WPF und XAML

Okay, vielen Dank, das dachte ich mir so schon. :)

Thema: Verwendung von INotifyPropertyChanged
Am im Forum: GUI: WPF und XAML

Hallo,
ich habe gerade als WPF Anfänger das Interface INotifyPropertyChanged entdeckt und für sehr praktisch befunden.

Gibt es irgendwelche Einwände dagegen es statt DependencyProperties zu verwenden, wenn man die zusätzlichen Möglichkeiten der DPs nicht braucht?