The event-callback programming model used by most GUI development frameworks frequently leads to disorganized and hard-to-maintain code. We believe there is significant value in designing language primitives that expressly address the challenges of writing and re-using GUI code. To explore this, we created InterState, a language and programming environment for expressing interactive behaviors in graphical applications. With InterState, programmers express behaviors declaratively as combinations of states and constraints. InterState introduces new primitives for defining and re-using behaviors, a visual notation for these primitives, and a live editor. We conducted a laboratory study to evaluate InterState's usability and found that participants were faster at understanding and modifying GUI components written in InterState than in event-callback code. Additionally, to better understand InterState's scope and expressiveness, we used it to implement a series of full-featured interfaces.