Laden...

Forenbeiträge von Wanna Ingesamt 11 Beiträge

17.09.2010 - 09:44 Uhr

Hallo,

kurze Frage, komme einfach nicht auf die Antwort.


namespace Renninger_SC_Anwendung
{
    /// <summary>
    /// Interaction logic for Spieltage_Tab.xaml
    /// </summary>
    public partial class Spieltage_Tab : UserControl
    {      
        public Spieltage_Tab()
        {
            this.InitializeComponent();

            Label testlbl = new Label();
            testlbl.Name = "testlblname";
            testlbl.Content = "test";

            //Button erzeugen
            Button btntest = new Button();
            btntest.Content = "Ändern";
            btntest.Click += btnStatusChange_Click;
            btntest.Name = "Testbutton";
        }

        private void btnStatusChange_Click(object sender, RoutedEventArgs e)
        {
            //hier möchte ich gerne auf das Label testlbl zugreifen. Kann ich aber nicht.
        }
    }
}

wenn ich mein Label per WPF in der XAML datei definiere kann ich vom buttoneventcatcher aus zugreifen. wenn ich das label im code erstelle nicht. warum?

ich muss es aber bei meinem problem im code erzeugen. wie kann ich es bewerkstelligen, dass ich trozdem darauf zugreifen kann?

Grüße

16.09.2010 - 13:42 Uhr

das wäre eine Idee, werde ich mal ausprobieren. Was ich ja auch noch benötige ist der Status aus dem Dropdownfeld. Allerdings kann ich auf keine aus dem Code erstelltes Label, Dropdown, etc. von hier aus:

        private void btnStatusChange_Click(object sender, RoutedEventArgs e)
        {
            //hier bräuchte ich die spieltags_id

            //string statusUpdate = "UPDATE rsc_spieltage_anwesenheit SET status = '' WHERE spieltag_id = '"+  +"' AND user_id = ''";
        }

zugreifen. Ist das so weil ich sie in der for schleife erstelle?

Wenn ich in der xaml datei ein label mache kann ich in der gesamten codebehind datei darauf zugreifen.

16.09.2010 - 08:55 Uhr

Hallo Ihr,

ich hänge nun schon seit 3 Tagen an diesem Problem. Ich schreibe momentan ein Programm für unsere Mannschaft. Momentan bin ich an der Spieltage - Übersicht. Das habe ich mit einem Tabcontrol gemacht. Jeder Spieltag ist ein Tabitem. In den einzelnen Tabitems ist immer dasselbe zu sehen. Daten zum Spieltag und eine Anwesenheitsliste (WPF Datagrid). Zudem ist noch ein Bereich da indem der User seine Anwesenheit ändern kann und genau da ist mein Problem.

mir gehts es genau genommen um einen Button. Ich habe wie schon geschrieben ein Dropdownfeld in der ich eine Liste von möglichen Anwesenheiten habe (ja, nein, ... blabla) und einen Button mit "Ändern". Ich glaube es ist logisch was ich machen möchte wenn ich auf ändern klicke. Das Problem ist nur ich muss meiner sql anweisung irgendwie die spieltags_id übergeben. Und genau daran scheitert es momentan


public Spieltage_Tab()
		{
			this.InitializeComponent();

            DatenbankAnbindung myDB = new DatenbankAnbindung();
            UserManager myUser = new UserManager();
            MannschaftsManager myMannschaft = new MannschaftsManager();

            

            //Tabs erstellen
            string sqlSpieltag = "SELECT * FROM rsc_spieltage WHERE mannschaft_id = '" + myUser.getUserMannschaftId(Thread.CurrentPrincipal.Identity.Name) + "' ORDER BY spiel_id";
            DataTable resultSpieltag = myDB.dbread(sqlSpieltag);

            //Aktuelle Tabelle
            int table_Spieltag = 0;

            #region Tabs füllen
            foreach (DataRow row in resultSpieltag.Rows)
            {
                //Layout erstellen
                TabItem tabItem = new TabItem();
                string tabItem_Header = "";

//Hier der Code zum erstellen der Fenster, ist recht lang und auch uninteressant, da alles so funktioniert wie es soll

                //TabItem Content hinzufügen
                tabItem.Content = sP_Content;
                //TabContol hinzufügen
                TabControl.Items.Add(tabItem);  


                //Laufvariable Table erhöhem
                table_Spieltag++;
            }
            #endregion
		}

        private void btnStatusChange_Click(object sender, RoutedEventArgs e)
        {
            //hier bräuchte ich die spieltags_id

            //string statusUpdate = "UPDATE rsc_spieltage_anwesenheit SET status = '' WHERE spieltag_id = '"+  +"' AND user_id = ''";
        }

ich hoffe ihr könnt mir helfen

05.09.2010 - 11:21 Uhr

Hi,

ich versuche derzeit ein DataGrid (aus dem WPF Toolkit) OnTheFly aus dem Code heraus zu erzeugen. Das klappt auch alles super. Nur an einer Stelle scheitere ich und finde keine Lösung. Und zwar schaffe ich es nicht "ItemsSource auf {Binding}" zu setzen.

So müsste es in xaml aussehen:

ItemsSource="{Binding}"

Wie erzeuge ich das in C# Code?

Google hat mir nicht weitergeholfen. Suche jetzt schon seit 3 Stunden eine Lösung. Vielleicht könnt ihr mir helfen

Hier mal der Code:


                //Erzeuge DataGrid
                DataGrid dG_Anwesenheit = new DataGrid();
                dG_Anwesenheit.AutoGenerateColumns = false;
                dG_Anwesenheit.AlternationCount = 2;
                dG_Anwesenheit.ColumnHeaderStyle = (Style)FindResource("dgHeaderStyle");
                dG_Anwesenheit.RowStyle = (Style)FindResource("dgRowStyle");
                dG_Anwesenheit.SelectionMode = DataGridSelectionMode.Extended;
                dG_Anwesenheit.SelectionUnit = DataGridSelectionUnit.FullRow;
                dG_Anwesenheit.GridLinesVisibility = DataGridGridLinesVisibility.All;
                dG_Anwesenheit.VerticalGridLinesBrush = Brushes.DarkGray;
                dG_Anwesenheit.ItemsSource =
                dG_Anwesenheit.DataContext = dg_Anwesenheit_result;


                //Erzeuge Columns
                DataGridTextColumn dG_Anwesenheit_TextVorname = new DataGridTextColumn();
                dG_Anwesenheit_TextVorname.Width = DataGridLength.SizeToCells;
                dG_Anwesenheit_TextVorname.Header = "Vorname";
                dG_Anwesenheit_TextVorname.MinWidth = 100;
                dG_Anwesenheit_TextVorname.IsReadOnly = true;
                dG_Anwesenheit_TextVorname.Binding = new Binding("vorname");

Danke schonmal

17.08.2010 - 13:10 Uhr

Funktioniert leider nicht. Angenommen ich setze mit dem "IsSelected" Trigger den Background auf "Yellow" so wird der Background beim Verlassen des Items von "MouseLeave" wieder auf WhiteSmoke gesetzt. Ich möchte aber, dass das Selected Item Gelb bleibt bis ein anderes Item "IsSelected" status erhält

17.08.2010 - 10:34 Uhr

Hi Jungs,

habe folgendes Template für ein ListBoxItem


<ControlTemplate x:Key="ListBoxItemControlTemplate" TargetType="{x:Type ListBoxItem}">
			<Border CornerRadius="5" Background="WhiteSmoke" Margin="0,0,0,5" Padding="5" Name="BorderControl" Cursor="Hand">
				<ContentPresenter Margin="0">				
				</ContentPresenter>
			</Border>
            <ControlTemplate.Triggers>
                <EventTrigger RoutedEvent="MouseEnter" SourceName="BorderControl">
                    <BeginStoryboard>
                        <Storyboard>
                            <ColorAnimation Storyboard.TargetName="BorderControl"
                                Storyboard.TargetProperty="Background.Color"
                                To="#70baff" Duration="00:00:00.2" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
                <EventTrigger RoutedEvent="MouseLeave" SourceName="BorderControl">
                    <BeginStoryboard>
                        <Storyboard>
                            <ColorAnimation Storyboard.TargetName="BorderControl"
                                Storyboard.TargetProperty="Background.Color"
                                To="WhiteSmoke" Duration="00:00:00.2" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>				
            </ControlTemplate.Triggers>
		</ControlTemplate>	

Das funktioniert soweit auch. Mein MouseEnter und MouseLeave Event tun das was sie sollen. Jetzt aber mein Problem. Ich hatte einen Trigger definiert für das Ereignis "IsSelected". Sobald ich das Item dann angewählt habe wurde der Trigger auch ausgeführt, leider aber "überfahren" sobald ich mit der Maus (MouseLeave) das Item verlassen habe.

Wie kann ich bewerkstelligen, dass mein Item "Selected" bleibt wenn ich es mit der Maus verlasse?

Greets,
Wanna

04.08.2010 - 14:09 Uhr

Hi,

nein es sind nicht nur zwei UserControls. Es sind viele 😄
Das mit dem verstecken mache ich ja schon. Ich will einfach nur aus dem UserControl das ContentControl ansteuern können. Hat denn da niemand eine Lösung parat?

Grüße

04.08.2010 - 10:05 Uhr

Versuch 3:

Ich habe eine WPF Anwendung mit einem Fenster. In diesem Fenster habe ich ein Element vom Typ ContentControl. In dieses ContentControl lade ich verschiedene UserControls.

Mein Problem. Vom Hauptfenster, in welchem das ContentControl erstellt wurde kann ich ja ganz normal darauf zugreifen. Wenn ich jetzt ein UserControl in diesem ContentControl darstellen lasse, kann ich jedoch innerhalb des UserControls nicht mehr auf das ContentControl zugreifen um ihm beispielsweise zu sagen "Hey, ich bin fertig, du kannst nun das andere UserControl" anzeigen.

Ich weiß ehrlich gesagt nicht mehr wie ich das noch anders beschreiben soll ...

02.08.2010 - 14:55 Uhr

Mhh, das ist mir schon klar. Ich versuche mal das ganze anders zu beschreiben:

Mein Control im MainWindow:

contentControlMainWindow.Content = new Startfenster();

Hier lade ich das Startfenster.

Mit klick auf einen Button lade ich das Fenster Mannschafterstellen:

contentControlMainWindow.Content = new MannschaftErstellen();

wenn ich jetzt in dem geladenen Fenster MannschaftErstellen auf den Button "Abbrechen" klicke möchte ich.

        
private void btnMannschaftErfassen_Abbrechen_Click(object sender, RoutedEventArgs e)
{
     //Hier möchte ich eigentlich das contentControlMainWindow.Content steuern
}

Das das Fenster zugeht und wieder das Startfenster angezeigt wird. Ich schaffe es aber nicht aus dem Fenster aus das "contentControlMainWindow.Content" zu steuern.

Nun klarer was ich vorhabe?

EDIT:
Habe nun herausgefunden, dass ich über

this.Visibility = Visibility.Hidden;

mein Fesnter ausblenden kann. Aber wie ich dann mein Startfenster wieder lade schaffe ich nach wie vor noch nicht!

Grüße,
Wanna

02.08.2010 - 10:02 Uhr

Hi,

mir sind die Befehle mehr oder weniger schon bekannt ja. Aber der unterschied zwischen schließen und "hiden" ist ja der, dass wenn ich das Fenster schließe, es beim nächsten aufruf neu instanziieren muss. Beim HIDE muss ich es ja nur wieder anzeigen. Verstehe ich das richtig?

Wenn ja würde ich es schon ganz gerne schließen können. Um beim nächsten mal wieder ein neues (mit leeren Feldern) aufrufen zu können.

Mein Problem ist ja nachwievor, wie ich aus dem Usercontrol Fenster aus mein ConentControl Elemen im MainWindow ansteuern kann um z.B. wieder das Startfenster also content festzusetzen.

Gleichzeitig sollte sich natürlich das momentan im content angezeigte fenster schließen

Grüße,
Wanna

01.08.2010 - 17:31 Uhr

Hi,

bin relativ neu im C# Bereich. Habe umfassend Google und die Forensuche bemüht aber leider nichts gefunden. Bin mir sicher, dass mein Problem relativ einfach gelöst werden kann. Aber finde die Lösung leider nicht selbst. Habe vielleicht auch einfach nach dem falschen gesucht:

Hier erst einmal was ich habe:
MainWindow.xaml.cs:


namespace xxx
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {   
        public MainWindow()
        {
            InitializeComponent();

            contentControlMainWindow.Content = new Startfenster();
        }

        private void MenuItemBeenden_Click(object sender, RoutedEventArgs e)
        {
            //Progamm Beenden
            Application.Current.Shutdown();
        }

        private void MenuItemMannschaftErstellen_Click(object sender, RoutedEventArgs e)
        {
            //Fenster bereitstellen für neue Mannschaft
            contentControlMainWindow.Content = new MannschaftErstellen();
        }
    }
}

Die einzelnen UserControls möchte ich in einem ContentControl darstellen. Ist die Lösung wie ich sie hier habe korrekt (wird zumindest das gemacht was ich möchte). Oder ist das vom Code her eher unsauber?

Nun aber zum eigentlichen Problem:


namespace xxx
{
    /// <summary>
    /// Interaktionslogik für MannschaftErstellen.xaml
    /// </summary>
    public partial class MannschaftErstellen : UserControl
    {
        public MannschaftErstellen()
        {
            InitializeComponent();
        }

        private void btnMannschaftErfassen_Abbrechen_Click(object sender, RoutedEventArgs e)
        {
            //Fenster Schließen
        }
    }
}

Beim Click auf den Abbrechen Button (btnMannschaftErfassen_Abbrechen_Click...) möchte ich, dass das Usercontrol MannschaftErstellen geschlossen wird und wieder mein UserControl Startfenster geladen wird.

Meine bisherigen Versuche über Events, die soweit ich verstanden habe nur in Klassen verwendet werden können, sind gescheitert.

Ich habe momentan einfach das Problem, wie ich vom UserControl aus meinem ContentControl im MainWindow sagen kann, es solle wieder das Startfenster Laden und wie ich das UserControl MannschaftErstellen schließen kann.

Ich hoffe ihr könnt mir helfen.

Danke,
Wanna